libcoap在Ubuntu下的编译(基于CMake)

引言

libcoap 是一个开源的轻量级 C 语言库,用于实现 CoAP(Constrained Application Protocol,受限应用协议)。CoAP 是一种专为资源受限设备设计的轻量级通信协议,适用于物联网(IoT)和嵌入式系统。今天介绍一下如何在Linux下进行编译。

libcoap主要功能和特点

  1. 协议实现libcoap 完整实现了 CoAP 协议的 RFC 7252 标准。

  2. 客户端和服务器支持:提供了 CoAP 客户端和服务器功能,可用于开发基于 CoAP 的应用程序。

  3. 跨平台支持:支持多种操作系统,包括 Linux、Windows、iOS 和 Android。

  4. 安全特性:支持 DTLS(Datagram Transport Layer Security)等安全机制。

  5. RESTful 风格:支持 RESTful 架构,提供 GET、POST、PUT 和 DELETE 等基本方法。

  6. 低资源消耗:专为资源受限的设备设计,优化了数据报长度和通信效率。

编译

官方和网上很多教程都是基于configure系统进行编译的,比较麻烦。今天介绍一下如何用CMake进行编译。

首先使用Git获得源码:

git clone https://github.com/obgm/libcoap.git

如果想使用SSL功能,需要先安装OpenSSL,我们此次只是在本地测试,就禁用了SSL相关功能,在命令行加上-DENABLE_DTLS=OFF。

armdev@armdev-VirtualBox:~/coap/libcoap-4.3.5$ cmake . -DENABLE_DTLS=OFF
-- The CXX compiler identification is GNU 7.5.0
-- The C compiler identification is GNU 7.5.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Looking for assert.h
-- Looking for assert.h - found
-- Looking for string.h
-- Looking for string.h - found
-- Looking for strings.h
-- Looking for strings.h - found
-- Looking for byteswap.h
-- Looking for byteswap.h - found
-- Looking for inttypes.h
-- Looking for inttypes.h - found
-- Looking for errno.h
-- Looking for errno.h - found
-- Looking for limits.h
-- Looking for limits.h - found
-- Looking for memory.h
-- Looking for memory.h - found
-- Looking for sys/sysctl.h
-- Looking for sys/sysctl.h - found
-- Looking for net/if.h
-- Looking for net/if.h - found
-- Looking for ifaddrs.h
-- Looking for ifaddrs.h - found
-- Looking for netinet/in.h
-- Looking for netinet/in.h - found
-- Looking for sys/epoll.h
-- Looking for sys/epoll.h - found
-- Looking for sys/timerfd.h
-- Looking for sys/timerfd.h - found
-- Looking for arpa/inet.h
-- Looking for arpa/inet.h - found
-- Looking for stdbool.h
-- Looking for stdbool.h - found
-- Looking for netdb.h
-- Looking for netdb.h - found
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for stdlib.h
-- Looking for stdlib.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for sys/ioctl.h
-- Looking for sys/ioctl.h - found
-- Looking for sys/socket.h
-- Looking for sys/socket.h - found
-- Looking for sys/stat.h
-- Looking for sys/stat.h - found
-- Looking for sys/time.h
-- Looking for sys/time.h - found
-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for sys/unistd.h
-- Looking for sys/unistd.h - found
-- Looking for time.h
-- Looking for time.h - found
-- Looking for unistd.h
-- Looking for unistd.h - found
-- Looking for float.h
-- Looking for float.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Looking for winsock2.h
-- Looking for winsock2.h - not found
-- Looking for ws2tcpip.h
-- Looking for ws2tcpip.h - not found
-- Looking for malloc
-- Looking for malloc - found
-- Looking for memset
-- Looking for memset - found
-- Looking for select
-- Looking for select - found
-- Looking for socket
-- Looking for socket - found
-- Looking for strcasecmp
-- Looking for strcasecmp - found
-- Looking for pthread_mutex_lock
-- Looking for pthread_mutex_lock - found
-- Looking for getaddrinfo
-- Looking for getaddrinfo - found
-- Looking for strnlen
-- Looking for strnlen - found
-- Looking for strrchr
-- Looking for strrchr - found
-- Looking for getrandom
-- Looking for getrandom - found
-- Looking for random
-- Looking for random - found
-- Looking for if_nametoindex
-- Looking for if_nametoindex - found
-- Looking for CMSG_FIRSTHDR
-- Looking for CMSG_FIRSTHDR - found
-- compiling with client support
-- compiling with server support
-- compiling with proxy support
-- compiling with OSCORE support
-- compiling with WebSockets support
-- compiling with async separate response support
-- compiling with IPv4 support
-- compiling with IPv6 support
-- compiling with Unix socket support
-- compiling with Q-Block (RFC9177) support
-- compiling with observe persistence support
-- compiling with epoll support
-- compiling with thread safe support
-- compiling with max logging level set to 8
-- 
-- libcoap Configuration Summary:
-- 
-- PACKAGE VERSION..................4.3.5
-- PACKAGE SOURCE...................4.3.5
-- LIBRARY API VERSION..............3
-- LIBRARY ABI VERSION..............3.2.0
-- ENABLE_DTLS:.....................OFF
-- ENABLE_TCP:......................ON
-- ENABLE_IPV4:.....................ON
-- ENABLE_IPV6:.....................ON
-- ENABLE_AF_UNIX:..................ON
-- ENABLE_WEBSOCKETS:...............ON
-- ENABLE_Q_BLOCK:..................ON
-- ENABLE_CLIENT_MODE:..............ON
-- ENABLE_SERVER_MODE:..............ON
-- ENABLE_OSCORE:...................ON
-- ENABLE_ASYNC:....................ON
-- ENABLE_THREAD_SAFE:..............ON
-- ENABLE_THREAD_RECURSIVE_CHECK....OFF
-- ENABLE_DOCS:.....................ON
-- ENABLE_EXAMPLES:.................ON
-- DTLS_BACKEND:....................default
-- WITH_GNUTLS:.....................OFF
-- WITH_TINYDTLS:...................OFF
-- WITH_OPENSSL:....................OFF
-- WITH_WOLFSSL:....................OFF
-- WITH_MBEDTLS:....................OFF
-- HAVE_LIBTINYDTLS:................
-- HAVE_LIBGNUTLS:..................
-- HAVE_LIBOPENSSL:.................
-- HAVE_LIBWOLFSSL:.................
-- HAVE_LIBMBEDTLS:.................
-- WITH_EPOLL:......................ON
-- WITH_OBSERVE_PERSIST:............ON
-- BUILD_SHARED_LIBS:...............OFF
-- MAX_LOGGING_LEVEL:...............8
-- WARNING_TO_ERROR:................OFF
-- CMAKE_C_COMPILER:................/usr/bin/cc
-- CMAKE_CXX_COMPILER_ID:...........GNU
-- CMAKE_BUILD_TYPE:................Debug
-- CMAKE_SYSTEM_PROCESSOR:..........x86_64
-- CMAKE_HOST_SYSTEM_NAME:..........Linux
-- CMAKE_GENERATOR:.................Unix Makefiles
-- 
-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE) 
CMake Warning at CMakeLists.txt:945 (message):Doxygen need to be installed to generate the doxygen documentation-- Configuring done
-- Generating done
-- Build files have been written to: /home/armdev/coap/libcoap-4.3.5

 这里提示因为没有Doxygen而报错,可以忽略。

然后使用make命令进行编译。

armdev@armdev-VirtualBox:~/coap/libcoap-4.3.5$ make
Consolidate compiler generated dependencies of target coap-3
[  2%] Building C object CMakeFiles/coap-3.dir/src/coap_address.c.o
[  4%] Building C object CMakeFiles/coap-3.dir/src/coap_asn1.c.o
[  6%] Building C object CMakeFiles/coap-3.dir/src/coap_async.c.o
[  8%] Building C object CMakeFiles/coap-3.dir/src/coap_block.c.o
[ 10%] Building C object CMakeFiles/coap-3.dir/src/coap_cache.c.o
[ 12%] Building C object CMakeFiles/coap-3.dir/src/coap_debug.c.o
[ 14%] Building C object CMakeFiles/coap-3.dir/src/coap_dtls.c.o
[ 16%] Building C object CMakeFiles/coap-3.dir/src/coap_encode.c.o
[ 18%] Building C object CMakeFiles/coap-3.dir/src/coap_event.c.o
[ 20%] Building C object CMakeFiles/coap-3.dir/src/coap_hashkey.c.o
[ 22%] Building C object CMakeFiles/coap-3.dir/src/coap_io.c.o
[ 24%] Building C object CMakeFiles/coap-3.dir/src/coap_layers.c.o
[ 26%] Building C object CMakeFiles/coap-3.dir/src/coap_mem.c.o
[ 28%] Building C object CMakeFiles/coap-3.dir/src/coap_net.c.o
[ 30%] Building C object CMakeFiles/coap-3.dir/src/coap_netif.c.o
[ 32%] Building C object CMakeFiles/coap-3.dir/src/coap_notls.c.o
[ 34%] Building C object CMakeFiles/coap-3.dir/src/coap_option.c.o
[ 36%] Building C object CMakeFiles/coap-3.dir/src/coap_oscore.c.o
[ 38%] Building C object CMakeFiles/coap-3.dir/src/coap_pdu.c.o
[ 40%] Building C object CMakeFiles/coap-3.dir/src/coap_prng.c.o
[ 42%] Building C object CMakeFiles/coap-3.dir/src/coap_proxy.c.o
[ 44%] Building C object CMakeFiles/coap-3.dir/src/coap_resource.c.o
[ 46%] Building C object CMakeFiles/coap-3.dir/src/coap_session.c.o
[ 48%] Building C object CMakeFiles/coap-3.dir/src/coap_sha1.c.o
[ 51%] Building C object CMakeFiles/coap-3.dir/src/coap_str.c.o
[ 53%] Building C object CMakeFiles/coap-3.dir/src/coap_subscribe.c.o
[ 55%] Building C object CMakeFiles/coap-3.dir/src/coap_tcp.c.o
[ 57%] Building C object CMakeFiles/coap-3.dir/src/coap_threadsafe.c.o
[ 59%] Building C object CMakeFiles/coap-3.dir/src/coap_time.c.o
[ 61%] Building C object CMakeFiles/coap-3.dir/src/coap_uri.c.o
[ 63%] Building C object CMakeFiles/coap-3.dir/src/coap_ws.c.o
[ 65%] Building C object CMakeFiles/coap-3.dir/src/oscore/oscore.c.o
[ 67%] Building C object CMakeFiles/coap-3.dir/src/oscore/oscore_cbor.c.o
[ 69%] Building C object CMakeFiles/coap-3.dir/src/oscore/oscore_context.c.o
[ 71%] Building C object CMakeFiles/coap-3.dir/src/oscore/oscore_cose.c.o
[ 73%] Building C object CMakeFiles/coap-3.dir/src/oscore/oscore_crypto.c.o
[ 75%] Linking C static library libcoap-3.a
[ 75%] Built target coap-3
[ 77%] Building C object CMakeFiles/coap-rd.dir/examples/coap-rd.c.o
[ 79%] Linking C executable coap-rd
[ 79%] Built target coap-rd
[ 81%] Building C object CMakeFiles/coap-client.dir/examples/coap-client.c.o
[ 83%] Linking C executable coap-client
[ 83%] Built target coap-client
[ 85%] Building C object CMakeFiles/etsi_iot_01.dir/examples/etsi_iot_01.c.o
[ 87%] Linking C executable etsi_iot_01
[ 87%] Built target etsi_iot_01
[ 89%] Building C object CMakeFiles/oscore-interop-server.dir/examples/oscore-interop-server.c.o
[ 91%] Linking C executable oscore-interop-server
[ 91%] Built target oscore-interop-server
[ 93%] Building C object CMakeFiles/tiny.dir/examples/tiny.c.o
[ 95%] Linking C executable tiny
[ 95%] Built target tiny
[ 97%] Building C object CMakeFiles/coap-server.dir/examples/coap-server.c.o
[100%] Linking C executable coap-server
[100%] Built target coap-server

编译成功后,在当前目录可以看到libcoap-3.a文件和两个例子的可执行文件。 

直接运行一下coap-client说明编译正确。

运行测试程序

首先运行./coap-server启动服务端。

然后运行客户端程序访问服务端:

armdev@armdev-VirtualBox:~/coap/libcoap-4.3.5$ ./coap-client -m get coap://localhost/
This is a test server made with libcoap (see https://libcoap.net)
Copyright (C) 2010--2024 Olaf Bergmann <bergmann@tzi.org> and others

结语

 至此完成了libcoap在本机的编译,后续就可以开发自己的程序了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28876.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker新手入门(持续更新中)

一、定义 快速构建、运行、管理应用的工具。 Docker可以帮助我们下载应用镜像&#xff0c;创建并运行镜像的容器&#xff0c;从而快速部署应用。 所谓镜像&#xff0c;就是将应用所需的函数库、依赖、配置等应用一起打包得到的。 所谓容器&#xff0c;为每个镜像的应用进程创建…

蓝桥杯C组真题——巧克力

题目如下 思路 代码及解析如下 谢谢观看

SLAM评估工具安装及使用EVO(Ubuntu20.04安装evo)--缺少 onnx 库还有Pandas 版本不兼容解决

介绍一下我的是ubuntu20.04.机载电脑是orinnx&#xff0c;通过源码烧写的系统。 首先打开终端&#xff0c;输入 pip install evo --upgrade --no-binary evo 安装过程中出现如下问题 缺少 onnx 库还有Pandas 版本不兼容&#xff0c; ONNX&#xff08;Open Neural Network E…

在虚拟机上安装hadoop

在虚拟机上安装 Hadoop 是一个常见的实验环境搭建过程。以下是详细的步骤和注意事项&#xff1a; 前面的课程我们已经准备好了三台虚拟设备球供我们学习大数据技术&#xff0c;今天我们将使用其中的一台设备来运行第一个hadoop 程序。 运行第一个 hadoop程序 要运行 hadoop 程序…

Redis 常见数据类型

官方文档 RedisCommands 1&#xff09;Redis 的命令有上百个&#xff0c;如果纯靠死记硬背比较困难&#xff0c;但是如果理解 Redis 的一些机制&#xff0c;会发现这些命令有很强的通用性。 2&#xff09;Redis 不是万金油&#xff0c;有些数据结构和命令必须在特定场景下使用…

VBA信息获取与处理第五节:如何在单个工作表中查找某个给定值

《VBA信息获取与处理》教程(版权10178984)是我推出第六套教程&#xff0c;目前已经是第一版修订了。这套教程定位于最高级&#xff0c;是学完初级&#xff0c;中级后的教程。这部教程给大家讲解的内容有&#xff1a;跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互…

永磁同步电机无速度算法--改进滑模观测器SMO(边界层法)

一、原理介绍 根据滑模观测器的定义&#xff0c;其切换函数是一个拥有高频切换特性的不连续项&#xff0c;为了进一步减小系统的抖振&#xff0c;将符号函数替换为Sigmoid函数&#xff0c;该函数为一种连续、光滑的切换函数&#xff0c;对抖振有良好的抑制效果&#xff0c;其数…

基于SpringBoot+mybatis+layui就业管理系统设计和实现

基于SpringBootmybatislayui就业管理系统设计和实现 &#x1f345; 作者主页 网顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统 &…

​《开源高仿Windows 12网页版:零安装体验未来操作系统界面》​​

&#x1f4cc; 大家好&#xff0c;我是智界工具库&#xff0c;致力于分享好用实用且智能的软件以及在JAVA语言开发中遇到的问题&#xff0c;如果本篇文章对你有所帮助请帮我点个小赞小收藏吧&#xff0c;谢谢喲&#xff01;&#x1f618;&#x1f618;&#x1f618; 博主声…

docker 安装达梦数据库(离线)

docker安装达梦数据库&#xff0c;官网上已经下载不了docker版本的了&#xff0c;下面可通过百度网盘下载 通过网盘分享的文件&#xff1a;dm8_20240715_x86_rh6_rq_single.tar.zip 链接: https://pan.baidu.com/s/1_ejcs_bRLZpICf69mPdK2w?pwdszj9 提取码: szj9 上传到服务…

HTML第三节

一.初识CSS 1.CSS定义 A.内部样式表 B.外部样式表 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&g…

【大模型系列篇】国产开源大模型DeepSeek-V3技术报告解析

DeepSeek-V3技术报告 目录 DeepSeek-V3技术报告 1. 摘要 2. 引言 3. DeepSeek V3 架构 3.1 基础架构 3.1.1. 多头潜在注意力 3.1.2. DeepSeekMoE和无辅助损失的负载均衡 3.2 多令牌预测 4. 基础设施 4.1 计算集群 4.2 训练框架 4.2.1. DualPipe算法与计算通信协同优…

linux的文件系统及文件类型

目录 一、Linux支持的文件系统 二、linux的文件类型 2.1、普通文件 2.2、目录文件 2.3、链接文件 2.4、字符设备文件: 2.5、块设备文件 2.6、套接字文件 2.7、管道文件 三、linux的文件属性 3.1、关于权限部分 四、Linux的文件结构 五、用户主目录 5.1、工作目录…

rabbitmq-amqp事务消息+消费失败重试机制+prefetch限流

1. 安装和配置 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency><dependency> <groupId>com.fasterxml.jackson.core</groupId> <arti…

web高可用集群项目(数据库主从同步、文件共享存储、nginx动静分离+负载均衡+高可用)

一、项目环境 二、环境准备 主机名IP地址备注openEuler-1192.168.121.11主负载调度器openEuler-2192.168.121.12副负载调度器openEuler-3192.168.121.13web-1&#xff08;静态&#xff09;openEuler-4192.168.121.14web-2&#xff08;静态&#xff09;openEuler-5192.168.121.…

企业工程项目管理系统源码:Java版源码解析

一、项目概述 鸿鹄工程项目管理系统是基于Spring Cloud、Spring Boot、Mybatis、Vue和ElementUI技术栈&#xff0c;采用前后端分离架构构建的工程管理软件。它旨在应对企业快速发展中的管理挑战&#xff0c;提升工程管理效率&#xff0c;减轻工作负担&#xff0c;加速信息处理…

深度学习五大模型:CNN、Transformer、BERT、RNN、GAN详细解析

卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09; 原理 &#xff1a;CNN主要由卷积层、池化层和全连接层组成。卷积层通过卷积核在输入数据上进行卷积运算&#xff0c;提取局部特征&#xff1b;池化层则对特征图进行下采样&#xff0c;降低特征维度&…

vtk 3D坐标标尺应用 3D 刻度尺

2d刻度尺 : vtk 2D 刻度尺 2D 比例尺-CSDN博客 简介&#xff1a; 3D 刻度尺&#xff0c;也是常用功能&#xff0c;功能强大 3D 刻度尺 CubeAxesActor vtkCubeAxes调整坐标轴的刻度、原点和显示效果&#xff0c;包括关闭小标尺、固定坐标轴原点&#xff0c;以及设置FlyMode模…

Hive-优化(参数优化篇)

map 数和reduce数 控制hive任务中的map数 合适的map数&#xff0c;会让资源分配的更平均&#xff0c;让我们的代码运行更快&#xff0c;通常情况下&#xff0c;作业会通过input的目录产生一个或者多个map任务。我们可以通过调整参数来控制运行过程中的map数。 Hive Map的数量…

双链路提升网络传输的可靠性扩展可用带宽

为了提升网络传输的可靠性或增加网络可用带宽&#xff0c; 通常使用双链路冗余备份或者双链路聚合的方式。 本文介绍几种双链路网络通信的案例。 5GWiFi冗余传输 双Socket绑定不同网络接口&#xff1a;通过Android的ConnectivityManager绑定5G蜂窝网络和WiFi的Socket连接&…