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.pswp.cn/bicheng/72544.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72544.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/72544.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

命名管道實現傳遞數據到二進制文件

一 前言&#xff1a; 在做項目的過程中&#xff0c;一般來說我們的信息輸入是有固定的端口/來源的&#xff0c;但是在當前的越來越快的開發節奏下&#xff0c;往往會出現輸入源還未完全確定的情況下需要我們先實現功能邏輯&#xff0c;信號接受端后面再對接。或者數據接受端和功…

VSCode知名主題帶毒 安裝量900萬次

目前微軟已經從 Visual Studio Marketplace 中刪除非常流行的主題擴展 Material Theme Free 和 Material Theme Icons&#xff0c;微軟稱這些主題擴展包含惡意代碼。 統計顯示這些擴展程序的安裝總次數近 900 萬次&#xff0c;在微軟實施刪除后現在已安裝這些擴展的開發者也會…

如何快速的解除oracle dataguard

有些時候&#xff0c;我們為了使oracle dg的standby庫另做他用&#xff0c;需要解除oracle dataguard數據同步。我本地因為standby庫存儲出現故障&#xff0c;導致dg存在問題&#xff0c;故需要解除。今天&#xff0c;我們通過使用部分命令&#xff0c;實現dg的快速解除。 1&a…

Windows系統編程(七)HotFixHook

InoolineHook需要讀寫兩次內存&#xff08;先HOOK&#xff0c;再還原&#xff09;&#xff0c;這種Hook方式&#xff0c;性能比較低&#xff0c;具有局限性。今天所講的HotFixHOOK&#xff08;熱補丁&#xff09;是InlineHook的升級版 Win32 API特殊性 Win32API的實現代碼有這…

Python Web應用開發之Flask框架——基礎

一、前言 在即將開啟的 Flask 學習之旅中,為了能夠順利掌握并運用 Flask 進行 Web 開發,您需要具備一定的基礎知識,同時了解相應的運行環境。 需要你具備的知識:Python 編程語言、HTML、CSS、HTTP協議、數據庫(如:MySQL、MongoDB) 本文所使用的環境:操作系統Windows…

TCP通訊與基于C#TCP通訊,跨窗收發消息Demo

TCP&#xff08;傳輸控制協議&#xff09;是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。它廣泛應用于互聯網中的數據通信&#xff0c;如網頁瀏覽、文件傳輸、電子郵件等。以下是TCP通信的基本概念和工作原理&#xff1a; 1. TCP的特點 面向連接&#xff1a;通信前…

【有源碼】仿DeepSeek問答網站+SpringBoot+VUE3+對接DeepSeek API

今天帶來一款優秀的項目&#xff1a;仿DeepSeek問答網站。 功能和官網差不多&#xff0c;也有歷史上下文&#xff0c;流失對話等。 本文介紹了系統功能與部署安裝步驟&#xff0c;如果您有任何問題&#xff0c;也請聯系學姐&#xff0c;偶現在是經驗豐富的程序員&#xff01; …

Ubuntu20.04雙系統安裝及軟件安裝(七):Anaconda3

Ubuntu20.04雙系統安裝及軟件安裝&#xff08;七&#xff09;&#xff1a;Anaconda3 打開Anaconda官網&#xff0c;在右側處填寫郵箱&#xff08;要真實有效&#xff01;&#xff09;&#xff0c;然后Submit。會出現如圖示的Success界面。 進入填寫的郵箱&#xff0c;有一封Ana…

洛谷 P2142 高精度減法(詳解)c++

題目鏈接&#xff1a;P2142 高精度減法 - 洛谷 1.題目 2.算法原理 解法:模擬列豎式計算的過程 先用字符串讀入&#xff0c;然后拆分每一位&#xff0c;逆序放進數組中利用數組&#xff0c;模擬列豎式減法的過程 在這兩步之前要多加一步&#xff0c;在模擬解法的過程&#…

在 MyBatis 中,若數據庫字段名與 SQL 保留字沖突解決辦法

在 MyBatis 中&#xff0c;若數據庫字段名與 SQL 保留字沖突&#xff0c;可通過以下方法解決&#xff1a; 目錄 一、使用轉義符號包裹字段名二、通過別名映射三、借助 MyBatis-Plus 注解四、全局配置策略&#xff08;輔助方案&#xff09;最佳實踐與注意事項 一、使用轉義符號…

ThreadLocal解析

1. ThreadLocal的定義與核心作用 ThreadLocal是Java中用于實現線程局部變量的工具類。它為每個線程提供獨立的變量副本&#xff0c;使得每個線程訪問的是自己的數據&#xff0c;從而避免多線程環境下的資源共享問題&#xff0c;實現線程隔離。 例如&#xff0c;解決SimpleDate…

Kafka零拷貝

Kafka為什么適用零拷貝&#xff0c;其他存儲結構不適用&#xff1f; Kafka 采用的是日志存儲模型&#xff0c;數據通常是順序寫入、順序讀取&#xff0c;并且它的消費模式是 “讀完即走”&#xff08;一次性讀取并發送給消費者&#xff09;&#xff0c;這與零拷貝的特性完美匹…

微服務組件詳解——sentinel

1.啟動sentinel&#xff1a; 下載jar sentinel-dashboard-1.8.0.jar 使用以下命令直接運行 jar 包&#xff08;JDK 版本必須≥ 1.8&#xff09;&#xff1a; java -Dserver.port9999 -jar D:\sentinel-dashboard-1.8.0.jar 控制臺訪問地址&#xff1a;http://localhost:9999…

AI數據分析:deepseek生成SQL

在當今數據驅動的時代&#xff0c;數據分析已成為企業和個人決策的重要工具。隨著人工智能技術的快速發展&#xff0c;AI 驅動的數據分析工具正在改變我們處理和分析數據的方式。本文將著重介紹如何使用 DeepSeek 進行自動補全SQL 查詢語句。 我們都知道&#xff0c;SQL 查詢語…

動態規劃01背包問題系列一>目標和

目錄 題目分析及優化&#xff1a;狀態表示&#xff1a;狀態轉移方程&#xff1a;初始化&#xff1a;填表順序&#xff1a;返回值&#xff1a;代碼呈現&#xff1a;優化&#xff1a;代碼呈現&#xff1a; 題目分析及優化&#xff1a; 狀態表示&#xff1a; 狀態轉移方程&#xf…

Linux 基礎---sudo權限 修改文件所屬人、用戶所屬組

sudo 概念&#xff1a;讓普通用戶使用管理員權限執行一些操作&#xff08;root&#xff09; 在命令前加上sudo 即可 修改文件所屬人、所屬組

HMC7043和HMC7044芯片配置使用

一,HMC7043芯片 MC7043獨特的特性是對14個通道分別進行獨立靈活的相位管理。所有14個通道均支持頻率和相位調整。這些輸出還可針對50 Ω或100 Ω內部和外部端接選項進行編程。HMC7043器件具有RF SYNC功能,支持確定性同步多個HMC7043器件,即確保所有時鐘輸出從同一時鐘沿開始…

【動手實驗】TCP半連接隊列、全連接隊列實戰分析

本文是對 從一次線上問題說起&#xff0c;詳解 TCP 半連接隊列、全連接隊列 這篇文章的實驗復現和總結&#xff0c;借此加深對 TCP 半連接隊列、全連接隊列的理解。 實驗環境 兩臺騰訊云服務器 node2&#xff08;172.19.0.12&#xff09; 和 node3&#xff08;172.19.0.15&am…

Springboot整合WebSocket+Redis以及微信小程序如何調用

一、 Springboot整合WebSocket 1. 引入socket依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>引入依賴后需要刷新maven,Websocket的版本默認跟隨S…

影刀RPA開發拓展--SQL常用語句全攻略

前言 SQL&#xff08;結構化查詢語言&#xff09;是數據庫管理和操作的核心工具&#xff0c;無論是初學者還是經驗豐富的數據庫管理員&#xff0c;掌握常用的 SQL 語句對于高效管理和查詢數據都至關重要。本文將系統性地介紹最常用的 SQL 語句&#xff0c;并為每個語句提供詳細…