wakaama编译及测试踩坑记录

下载

笔者一开始通过在网上搜索,直接下载的wakaama源码包。

为接下来的编译埋了坑:cmake会提示如下错误。

CMake Error at wakaama.cmake:104 (message):  
    lwm2mclient_tinydtls: tinydtls support requested, but submodule not checked  out
Call Stack (most recent call first):  
    examples/client/CMakeLists.txt:33 (target_sources_shared)

通过阅读sdk中的README.md文档后得知:

## Checking out the code
### Using Wakaama as library
```
git clone https://github.com/eclipse/wakaama.git
```
### Working on WakaamaWhen working on Wakaama itself, or intending to run the example client application, submodules must be checked out:
```
git clone --recurse-submodules https://github.com/eclipse/wakaama.git
```

所以正确的做法是安装git然后clone:

git clone --recurse-submodules https://github.com/eclipse/wakaama.git

编译

参考网上给的编译步骤:

cmake example/client
make

由于笔者用的是原生ubuntu 16.04,没有编译需要的cmake,需要安装。

The program 'cmake' is currently not installed. You can install it by typing:
sudo apt install cmake

参考:CMAKE工具学习 - 清风(Breeze.Wu) - 博客园 (cnblogs.com)

由于wakaama编译对cmake版本有要求,需要高于3.13,建议下载官网最新源码包,编译安装。笔者先是用apt安装的,默认版本太低为3.5.1。

CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
  CMake 3.13 or higher is required.  You are running version 3.5.1


-- Configuring incomplete, errors occurred!

配置cmake编译环境时又有个坑:提示缺少OpenSSL,需要安装libssl-dev库,而不是禁掉,否则会影响wakaama的编译

./configure
CMake Error at Utilities/cmcurl/CMakeLists.txt:608 (message):
  Could not find OpenSSL.  Install an OpenSSL development package or
  configure CMake with -DCMAKE_USE_OPENSSL=OFF to build without OpenSSL.


-- Configuring incomplete, errors occurred!

openssl问题参考:(33条消息) 在Linux中安装Cmake过程中,遇到有关于openSSL的问题_monopolizing的博客-CSDN博客_cmake openssl

openssl version -a
sudo apt-get install libssl-dev
./configure
make -j4
sudo make install
cmake --version

cmake已成功更新到3.25.2版本。继续编译wakaama源码,又报了缺少git的错误。

如下指令安装git:

sudo apt install git
git --version

继续编译wakaama源码,由于笔者是下载的压缩包源码,编译会报一开始提到的错误。重新clone代码

git clone --recurse-submodules https://github.com/eclipse/wakaama.git

再编译,cmake已经成功了。

peter@peter-vm-pc:~/wakaama_clt$ cmake examples/client/
-- The C compiler identification is GNU 5.4.0
-- 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
-- lwm2mclient: Endiannes not set, defaulting to little endian
-- lwm2mclient: Default CoAP block size not set, using 1024
-- lwm2mclient_tinydtls: Endiannes not set, defaulting to little endian
-- lwm2mclient_tinydtls: Default CoAP block size not set, using 1024
-- Found Git: /usr/bin/git (found version "2.7.4") 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/peter/wakaama_clt

make阶段又报错了

cc1: error: -Werror=absolute-value: no option -Wabsolute-value

一开始尝试将gcc升级到最新版本,问题没有解决。经查找源码,发现是在wakaama.cmake文件中将参数-Werror=absolute-value自动分发给了各个子模块,将其disable后继续编译。

至此client编译成功了,可执行lwm2mclient /?验证。

peter@peter-vm-pc:~/wakaama_clt$ ./lwm2mclient /?
Usage: lwm2mclient [OPTION]
Launch a LWM2M client.
Options:
  -n NAME    Set the endpoint name of the Client. Default: testlwm2mclient
  -l PORT    Set the local UDP port of the Client. Default: 56830
  -h HOST    Set the hostname of the LWM2M Server to connect to. Default: localhost
  -p PORT    Set the port of the LWM2M Server to connect to. Default: 5683
  -4        Use IPv4 connection. Default: IPv6 connection
  -t TIME    Set the lifetime of the Client. Default: 300
  -b        Bootstrap requested.
  -c        Change battery level over time.
  -S BYTES    CoAP block size. Options: 16, 32, 64, 128, 256, 512, 1024. Default: 1024

出于简单粗暴,笔者另外拷贝了一份源码,单独编译了server模块。

peter@peter-vm-pc:~/wakaama_svr$ cmake examples/server/
-- lwm2mserver: Endiannes not set, defaulting to little endian
-- lwm2mserver: Default CoAP block size not set, using 1024
-- Configuring done
-- Generating done
-- Build files have been written to: /home/peter/wakaama_svr

peter@peter-vm-pc:~/wakaama_svr$ make
[100%] Built target lwm2mserver

peter@peter-vm-pc:~/wakaama_svr$ ./lwm2mserver /?
Usage: lwm2mserver [OPTION]
Launch a LWM2M server on localhost.

Options:
  -4        Use IPv4 connection. Default: IPv6 connection
  -l PORT    Set the local UDP port of the Server. Default: 5683
  -S BYTES    CoAP block size. Options: 16, 32, 64, 128, 256, 512, 1024. Default: 1024

测试

【服务端】

./lwm2mserver -4
> 

#客户端连接后log
194 bytes received from [127.0.0.1]:56830
44 02 D4 B6  B6 D4 47 77  B2 72 64 11  28 39 6C 77   D.....Gw.rd.(9lw
6D 32 6D 3D  31 2E 31 0D  04 65 70 3D  50 65 74 65   m2m=1.1..ep=Pete
72 4C 77 6D  32 6D 54 65  73 74 03 62  3D 55 06 6C   rLwm2mTest.b=U.l
74 3D 33 30  30 FF 3C 2F  3E 3B 72 74  3D 22 6F 6D   t=300.</>;rt="om
61 2E 6C 77  6D 32 6D 22  3B 63 74 3D  31 31 30 2C   a.lwm2m";ct=110,
3C 2F 31 3E  3B 76 65 72  3D 31 2E 31  2C 3C 2F 31   </1>;ver=1.1,</1
2F 30 3E 2C  3C 2F 32 2F  30 3E 2C 3C  2F 33 2F 30   /0>,</2/0>,</3/0
3E 2C 3C 2F  34 2F 30 3E  2C 3C 2F 35  2F 30 3E 2C   >,</4/0>,</5/0>,
3C 2F 36 2F  30 3E 2C 3C  2F 37 2F 30  3E 2C 3C 2F   </6/0>,</7/0>,</
33 31 30 32  34 3E 3B 76  65 72 3D 31  2E 30 2C 3C   31024>;ver=1.0,<
2F 33 31 30  32 34 2F 31  30 3E 2C 3C  2F 33 31 30   /31024/10>,</310
32 34 2F 31  31 3E 2C 3C  2F 33 31 30  32 34 2F 31   24/11>,</31024/1
32 3E                                                2>

New client #0 registered.
Client #0:
    name: "PeterLwm2mTest"
    version: "1.1"
    binding: "UDP"
    lifetime: 300 sec
    objects: /1 (1.1), /1/0, /2/0, /3/0, /4/0, /5/0, /6/0, /7/0, /31024 (1.0), /31024/10, /31024/11, /31024/12,

【客户端】

peter@peter-vm-pc:~/wakaama_clt$ ./lwm2mclient -n PeterLwm2mTest -4
Trying to bind LWM2M Client to port 56830
LWM2M Client "PeterLwm2mTest" started on port 56830
> Opening connection to server at 127.0.0.1:5683
 -> State: STATE_REGISTERING
13 bytes received from [127.0.0.1]:5683
64 41 D4 B6  B6 D4 47 77  82 72 64 01  30  dA....Gw.rd.0
 -> State: STATE_READY
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
编译Spring源码并进行Maven测试,你可以按照以下步骤进行操作: 1. 首先,确保你已经正确地配置了Maven环境,并且已经安装了最新版本的Maven。 2. 打开Spring源码的根目录,并找到build.gradle文件。 3. 根据引用和引用中的内容,修改build.gradle文件中的repositories部分。将原来的mavenCentral()和maven { url "https://repo.spring.io/libs-spring-framework-build" }保留不变,然后添加一个新的maven配置,如引用所示。这个新的配置将使用阿里云的Maven仓库来下载依赖。 4. 保存并关闭build.gradle文件。 5. 在命令行中进入Spring源码的根目录,并执行以下命令来编译源码和运行Maven测试: ``` mvn clean install ``` 6. Maven将会自动下载所需的依赖,并进行编译测试。这个过程可能会需要一些时间,取决于你的网络速度和电脑性能。 7. 当编译测试完成后,你可以在Spring源码目录的target文件夹中找到编译后的构建结果。 请注意,编译Spring源码可能需要一些时间和计算资源,特别是在较慢的网络环境下。确保你的电脑满足编译要求,并且有足够的存储空间来存放编译结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Spring源码系列(十三)——Spring源码编译及详细注解](https://blog.csdn.net/zxd1435513775/article/details/124673192)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Spring源码编译测试](https://blog.csdn.net/i_wavelet/article/details/126459704)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值