记录一次使用 Ubuntu 编译 Wakaama 踩坑过程

news2025/2/24 17:11:00

1. 背景


公司项目需要使用 LwM2M 协议,由于是个相对冷门的小众协议,客户端模拟器几乎没有,只有 Eclipse Wakaama 相对来说功能齐全、易用,但是这个软件没有编译好的程序包,只能从 Github 拉取源码手动编译运行。
不知道什么原因,我这边联通网络无论是否挂梯子,都完全无法访问 Github 网站,于是我从 Gitee 上面找到一份复制的镜像仓库,以为这样就可以了。然而这个项目含有子模块,在 Gitee 无法使用 --recusive 拉取子模块,好在同事的网络可以,帮我把源码全部拉下来发给我了,也就是因为这样,才埋下了后面的深坑


2. 踩坑过程


以下所有操作均是在 Docker 镜像 Ubuntu:22.04 的容器中进行,默认是 root 用户,如果不是,所有命令需要添加 sudo

2.1 源码拉取

官方提供的拉取命令

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

拉取完成后将源码拷贝至 Ubuntu 容器的 /tmp 目录下

# 启动 Ubuntu 容器
docker run -d -it --name ubuntu ubuntu:22.04 /bin/bash
# 拷贝源码至容器内
docker cp wakaama ubuntu:/tmp/

进入容器内部

docker exec -it ubuntu /bin/bash
2.2 安装依赖程序
apt-get update
apt-get install build-essential cmake libcurl4-openssl-dev libtool pkg-config

验证安装

$ cmake -version
cmake version 3.16.3
CMake suite maintained and supported by Kitware (kitware.com/cmake).nformation.
2.3 编译 wakaama
cd /tmp/wakaama
mkdir build
cd build
cmake ..
make

直接报错如下:

root@0c28a21cddfa:/tmp/wakaama/build# make
[ 12%] Built target bootstrap_server
[ 29%] Built target lwm2mclient
[ 30%] Built target submodule_update
[ 30%] Performing autoconf step for 'external_tinydtls'
[ 31%] Performing autoheader step for 'external_tinydtls'
[ 31%] Performing configure step for 'external_tinydtls'
CMake Error at /tmp/wakaama/build/examples/client/external_tinydtls-prefix/src/external_tinydtls-stamp/external_tinydtls-configure-.cmake:49 (message):
  Command failed: 1

   '/tmp/wakaama/examples/shared/tinydtls/configure' '--host=cc'

  See also

    /tmp/wakaama/build/examples/client/external_tinydtls-prefix/src/external_tinydtls-stamp/external_tinydtls-configure-*.log


make[2]: *** [examples/client/CMakeFiles/external_tinydtls.dir/build.make:104: examples/client/external_tinydtls-prefix/src/external_tinydtls-stamp/external_tinydtls-configure] Error 1
make[1]: *** [CMakeFiles/Makefile2:294: examples/client/CMakeFiles/external_tinydtls.dir/all] Error 2
make: *** [Makefile:101: all] Error 2

根据提示查看错误日志

cat /tmp/wakaama/build/examples/client/external_tinydtls-prefix/src/external_tinydtls-stamp/external_tinydtls-configure-err.log

只有一行错误信息

.in'ig.status: error: cannot find input file: `Makefile

查阅资料发现是因为文件换行符是 doc 而不是 unix,这就是我开头提到的大坑,由于我把源码拉取到 windows 系统上,导致部分文件的换行符变成了 dos 格式的。
解决办法很简单,下载 vim 编辑器

apt-get install vim

找到报错的文件 configure.ac

root@0c28a21cddfa:/tmp/wakaama/build# find / -name "configure.ac"
/tmp/wakaama/examples/shared/tinydtls/configure.ac

使用 vim 编辑

vim /tmp/wakaama/examples/shared/tinydtls/configure.ac

在编辑页面输入以下命令并按回车即可转换格式

:set ff=unix

在这里插入图片描述
转换完成保存退出即可
再次执行编译命令

make

这次进度比之前多,但是仍然报错中断

In file included from /tmp/wakaama/tests/block1tests.c:19:
/tmp/wakaama/tests/tests.h:21:10: fatal error: CUnit/CUError.h: No such file or directory
   21 | #include "CUnit/CUError.h"
      |          ^~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [tests/CMakeFiles/lwm2munittests.dir/build.make:76: tests/CMakeFiles/lwm2munittests.dir/block1tests.c.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:372: tests/CMakeFiles/lwm2munittests.dir/all] Error 2
make: *** [Makefile:101: all] Error 2

根据网上大多文章都让去下载 Cunit 源码然后 cmake 编译来解决,非常麻烦。
这里我询问了当前大火的人工智能 chatGPT,看看机器人是怎么解决的:
在这里插入图片描述
非常清晰、明了、简单,直接安装缺失的库即可

apt-get install libcunit1 libcunit1-doc libcunit1-dev

再次执行编译即可通过

make
...
[ 98%] Building C object tests/CMakeFiles/lwm2munittests.dir/__/examples/shared/commandline.c.o
[ 99%] Building C object tests/CMakeFiles/lwm2munittests.dir/__/examples/shared/memtrace.c.o
[ 99%] Building C object tests/CMakeFiles/lwm2munittests.dir/__/examples/shared/platform.c.o
[100%] Building C object tests/CMakeFiles/lwm2munittests.dir/__/examples/shared/connection.c.o
[100%] Linking C executable lwm2munittests
[100%] Built target lwm2munittests
2.4 验证编译结果

进入 example/client 目录下,可以执行客户端程序,编译成功。

root@0c28a21cddfa:/tmp/wakaama/build# ls
CMakeCache.txt  CMakeFiles  CTestTestfile.cmake  Makefile  cmake_install.cmake  examples  tests
root@0c28a21cddfa:/tmp/wakaama/build#
root@0c28a21cddfa:/tmp/wakaama/build# cd examples/
root@0c28a21cddfa:/tmp/wakaama/build/examples# ls
CMakeFiles  Makefile  bootstrap_server  client  cmake_install.cmake  lightclient  server
root@0c28a21cddfa:/tmp/wakaama/build/examples#
root@0c28a21cddfa:/tmp/wakaama/build/examples# cd client/
root@0c28a21cddfa:/tmp/wakaama/build/examples/client# ls
CMakeFiles  Makefile  cmake_install.cmake  external_tinydtls-prefix  lwm2mclient  lwm2mclient_tinydtls
root@0c28a21cddfa:/tmp/wakaama/build/examples/client#
root@0c28a21cddfa:/tmp/wakaama/build/examples/client# ./lwm2mclient
Trying to bind LWM2M Client to port 56830
LWM2M Client "testlwm2mclient" started on port 56830
> Opening connection to server at ::1:5683
Connection creation failed.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

操作系统期末知识点复习

操作系统知识点总结 参考用书:计算机操作系统(第四版)汤小丹等著 1、必考知识点 第一章 操作系统引论 操作系统的概念及特征操作系统的运行环境 第二章 进程的描述与控制 进程状态与转换同步与互斥的基本概念信号量信号量的基本应用生产者消…

Nacos的配置中心的了解

目录 1. 为何需要配置中心 2. nacos的配置中心 2.1 配置示例 2.2 多环境配置 2.3 GROUP 2.4 namespace 1. 为何需要配置中心 没有配置中心的情况下会出现什么情况: 如果没有配置中心,则各个服务的配置文件分散在各个项目中,不方便维护…

不用光盘重装系统如何操作

​光盘重装系统是之前十分常用的系统安装方法,随着科技的飞速发展,现如今重装系统的方法五花八门,一键重装系统以及U盘重装系统等方法的出现取代了光盘重装系统,这里就来介绍一下不用光盘重装系统操作方法。 工具/原料: 系统版本:windows10系统 品牌型…

Kotlin协程笔记:CoroutineScope管理协程

CoroutineScope 是实现协程结构化并发的关键。使用 CoroutineScope,可以批量管理同一个作用域下面所有的协程。 CoroutineScope 与 结构化并发 launch、async 被定义成了 CoroutineScope 扩展函数。在调用 launch 之前,必须先获取 CoroutineScope。 pub…

高级又高效的属性表编辑技术,你值得拥有!

当你要按关键词选择内容,无从下手? 当你要修改字段的部分内容,不知所措? 当你要提取出字段的某些内容,毫无头绪? 当你要按照位数来提取字符内容,力不从心? 当你要为字段补充一些新的内容,目瞪口呆? 当你要把一个字段分割成多个字段,抓耳挠腮? ...... 属性表的…

CUDA ~ WarpReduce

又是一篇关于cuda的 要好好学学哦, CUDA 编程进阶分享,一些 warp 的使用 如何实现一个高效的Softmax CUDA kernel?多少还是有些细节没有理解,恰好最近要做一个类似的 ReduceScale Kernel,原理机制还是比较相似的,所以…

CSS -- 10. 移动WEB开发之rem布局

文章目录移动WEB开发之rem布局1 rem基础2 媒体查询2.1 什么是媒体查询2.2 语法规范2.3 mediatype 查询类型2.4 关键字2.5 媒体特性2.6 案例:根据页面宽度改变背景颜色2.7 媒体查询rem实现元素动态大小变化2.8 针对不同的屏幕尺寸引入不同的样式文件3 Less基础3.1 维…

8000字详解Thread Pool Executor

摘要:Java是如何实现和管理线程池的?本文分享自华为云社区《JUC线程池: ThreadPoolExecutor详解》,作者:龙哥手记 。 带着大厂的面试问题去理解 提示 请带着这些问题继续后文,会很大程度上帮助你更好的理解相关知识点。pdai …

数据泄露成数据安全最大风险,企业如何预防呢?

据《中国政企机构数据安全风险分析报告》显示,2022年1月——2022年10月,安全内参共收录全球政企机构重大数据安全报道180起,其中数据泄露相关安全事件高达93起,占51.7%。与近三年平均每月公开报道频次相比,2022年相较前…

如何在3DMAX中不使用Maxscript或插件破碎物体对象?

在3DMAX中破碎物体我们通常会借助Maxscript或者插件,其实,不借助任何其他工具,3DMAX也可以实现对物体的破碎,下面就给大家介绍一种方法: 1.首先,创建一个破碎对象,比如一个石块(或者…

AI趋势下,小布助手的进化论

“要构建人工智能等高精尖产业的新增长引擎”,随着人工智能在未来全球科技经济中的重要作用愈加凸显,当前产业已然获得了有史以来最强的政策建构力量。 随着政策的利好,中国人工智能进入一个前所未有的快速发展阶段。企查查数据显示&#xf…

疫情下的在线教学数据观

由于新型冠状病毒感染的肺炎疫情影响,剧烈增长的市场需求助推了在线教育的发展,同时也暴露了一些问题。 最近我们被客户要求撰写关于疫情的研究报告,包括一些图形和统计输出。 在本文中,我们结合了对100多个高中学生进行的在线教…

快讯 | 嘉为蓝鲸受邀出席汽车新智造数字行业峰会,助力构建数字时代竞争力!

12月9日,第五届GADI汽车新智造数字创新行业峰会暨年度评选盛典于上海圆满落幕,嘉为蓝鲸受邀出席。本届大会以“数智创新 赋能破局”为主题,多方面切入解读新能源汽车的数字化发展趋势,助力车企构建数字时代竞争力。 01 研运一体&a…

数据通信基础 - 信道特性(奈奎斯特定理、香农定理 )

文章目录1 概述1.1 通信系统模型图2 信道特性2.1 信道带宽 W2.2 奈奎斯特定理 - 无噪音2.3 香农定理 - 有噪音2.4 带宽、码元速率、数据速率 关系梳理3 网工软考真题1 概述 1.1 通信系统模型图 通信的目的:传递信息 2 信道特性 2.1 信道带宽 W 模拟信道&#…

数据中台选型必读(六):说说数据服务的七大核心功能

在前面的文章中,我们介绍了数据中台的元数据中心、指标字典与指标体系、数据模型设计、数据质量评估等内容,这些都是One Data理念下数据中台架构的重要部分。 我们今天要讲的One Service——统一数据服务,指的是由数据中台提供统一的数据接入…

搭建自动发卡网站搭建教程(独角数卡)保姆级教程,支付 + 图文

自动发卡网站 程序是开源的独角数卡 我搭建了一个这样的 wooknow自动销售发卡http://ok.54ndd.com/ 一个在线销售虚拟产品的平台。你应该见过这样的发卡平台。一些虚拟产品,如软件、激活码和会员可以放在上面出售。我在这里使用的发卡项目是一个开源的单字符数字…

Matplotlib怎么创建 axes 对象?

在 matplotlib 中,有几种常见的方法来创建 axes 对象: 1.使用 subplots 函数: import matplotlib.pyplot as pltfig, ax plt.subplots()subplots 函数会创建一个新的图形(figure)并返回一个包含单个子区域&#xff…

二肽Ala-Pro,13485-59-1

Substrate for skin fibroblast prolidase.皮肤成纤维细胞prolida酶的底物。 编号: 199181中文名称: 二肽Ala-Pro英文名: Ala-ProCAS号: 13485-59-1单字母: H2N-AP-OH三字母: H2N-Ala-Pro-COOH氨基酸个数: 2分子式: C8H14N2O3平均分子量: 186.21精确分子量: 186.1等电点(PI): 6…

【git 提交、撤销、回退代码】

git 提交、撤销、回退代码git push后 发现提交分支错误 --> 回退代码git 未push、取消commit(保留代码)git 未push、取消commit(不保留代码)git push后 发现提交分支错误 --> 回退代码 首先 git log 查看提交记录, 找到需要回退到哪次…

CSRF实战案例—绕过referer值验证

在一个添加管理员的界面引起了我的注意 尝试添加一个管理员,如下添加成功,我们可以观察其请求包中并未存在token字段,可能存在csrf漏洞。但是存在“Referer”和“Origin”字段 我们把referer字段删了只剩origin,查看是否可以请求成功,发现可以请求成功 两个值都删了,请求…