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

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-*.logmake[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 directory21 | #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.rhkb.cn/news/16567.html

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

相关文章

【人工智能】科大讯飞API接口调用(第一集)

前言 这学期有一门人工智能教育课程,恰巧又有这么一个实践,要求进行人工智能接口调用 于是首选了科大讯飞,下面是详细过程记录 科大讯飞接口调用 以下是流程以及实现细节描述 调用流程 第一步 来到科大讯飞开放平台 http://www.xfyun.…

14个适用于Eclipse IDE的有用(免费)插件

在线Eclipse市场上有1,667个可用的插件和解决方案! 在您阅读本文时,可能还有更多。 如果您在官方市场之外冒险,您会发现数百种其他开发的插件都可以与Eclipse IDE兼容。 听起来像是经典的第一世界问题。 太多的插件可供选择。 您将永远不需要…

问答系统(QA)调研

引言 智能问答系统广泛用于回答人们以自然语言形式提出的问题,经典应用场景包括:智能语音交互、在线客服、知识获取、情感类聊天等。根据QA任务,可以将QA大致分为5大类,分别为: 文本问答(text-based QA&am…

ChatGPT与码农的机会

之前博客中已经写了很多有关AI在博客编写方面的优势与对未来博客的编写方面的思考。这篇文档我继续分享我在开发中的一个案例和相关的感想。 事件还原 我发现ChatGPT也可以帮助我编写OData,于是我也利用GPT帮助我编程。 OData如何将filter与apply字段联合使用&am…

ChatGPT:竟然精通ENVI IDL、ArcGIS等软件!

目录 01 使用途径 02 使用 01 使用途径 我试了很多网站,包括注册登录、插件、镜像网站,微信机器人,QQ机器人,但是目前这些或多或少都由于OpenAI的限制无法正常使用。所以总的来说需要科学上网并且需要国外手机号,这有…

matplotlib——1. 常用功能汇总

文章目录 1.IDE里的1.1 显示模式(plt.ion()和plt.ioff())1.2 backend说明 2. jupyter里的(主要是和iwidgets组件结合交互式)3 通用的3.0 根据颜色名称获取对应rgb值(0~255)3.1 cmap3.1.1 cmap绘制CMYK四个通…

大模型综述来了!一文带你理清全球AI巨头的大模型进化史

夕小瑶科技说 原创 作者 | 小戏,Python 如果自己是一个大模型的小白,第一眼看到 GPT、PaLm、LLaMA 这些单词的怪异组合会作何感想?假如再往深里入门,又看到 BERT、BART、RoBERTa、ELMo 这些奇奇怪怪的词一个接一个蹦出来&#x…

Maven依赖传递失效问题解决

Maven依赖传递失效问题解决 背景介绍问题描述解决方式 记一次非常规问题解决: maven依赖传递关联(传递)失效 背景介绍 首先maven工程结构大致是这样 (注意maven仓库 是本地仓库-公司中央仓库-远程仓库, 可能对理解遇到的问题原因和为何那样解决有些帮助): <groupId>com…

利用chatGPT搭配plantUML生成UML图

是不是感觉自己画uml图繁琐复杂没思路&#xff0c;画出来的uml图太简单&#xff1f;那就快来试试利用chatGPT搭配plantUML生成UML图&#xff0c;一键生成&#xff0c;自己调试解放双手&#xff0c;开拓思维&#xff0c;快来试试吧&#xff01; 在chatGPT中生成plantUML代码 如果…

谷歌发文批评苹果:实在是 “拖大家后腿”

1992 年 12 月 3 日&#xff0c;世界上第一条 SMS 消息成功发送&#xff0c;如今已经过去 30 周年。在这个关键节点&#xff0c;谷歌再度发文赞美 RCS 短信标准&#xff0c;并批评苹果迟迟不采用该标。 RCS 全称 Rich Communication Suite - 富媒体通信标准&#xff0c;属于高…

库克「豪赌」MR:七年磨一剑,不行也得行

苹果MR是一款在重重阻力之下、由库克强行拍板推向市场的产品。 作者&#xff1a;常嘉帅 “你们看懂了吗&#xff08;Are you getting it&#xff09;?”乔布斯这样问&#xff0c;“一台音乐播放器&#xff0c;一部手机&#xff0c;和一部互联网通讯设备。” 乔布斯以他魅力十足…

我问了10个博客专家好友,原来他们都在用这些高效率软件

大家好&#xff0c;我是记得诚。 在CSDN上我认识了很多大佬级别的博客专家&#xff0c;最近询问了我的10个博客专家好友&#xff0c;向他们取经&#xff0c;扒出了他们珍藏的高效率软件&#xff0c;很多软件我用完之后&#xff0c;当场发出了OMG的尖叫&#xff0c;我重度使用了…

何同学采访苹果CEO库克上热搜,网友表示自愧不如

昨日&#xff0c;22岁B站知名UP主“老师好我叫何同学”采访了苹果CEO蒂姆-库克&#xff0c;登上微博热搜榜&#xff0c;引起了网友们的热议。 何同学是北京邮电大学学霸&#xff0c;22岁的大学生&#xff0c;出于兴趣的原因在B站注册账号发布数码产品的测评视频&#xff0c;他做…

“AI教父”李开复筹办新公司,掘金 AI 2.0 三个大方向

图片&#xff1a;由无界AI画图工具生成 3月19日&#xff0c;创新工场董事长兼CEO李开复在朋友圈宣布&#xff0c;正在筹组一个名为“Project Al 2.0”的新公司&#xff0c;一个旨在探索AI2.0的创新项目。 图片&#xff1a;李开复在朋友圈紧急“摇人”PK chatGPT 目前&#xff0…

谁能真正替代你? AI编码工具深度对比 (chatGPT/Copilot/Cursor/New Bing)

写在开头 这几个月AI相关新闻的火爆程度大家都已经看见了&#xff0c;作为一个被裹挟在AI时代浪潮中的程序员&#xff0c;在这几个月里我也是异常兴奋和焦虑。甚至都兴奋的不想拖更了。不仅仅兴奋于AI对于我们生产力的全面提升&#xff0c;也焦虑于Copilot等AI辅助编码工具&…

【ChatGPT】《ChatGPT 算法原理与实战》1: 引言:从 CNN、RNN 到 Transformers 架构、自注意力机制(图文+数学公式+代码实例详解)

文章目录 1: 引言:从 CNN、RNN 到 Transformers自然语言处理的挑战传统方法的限制Recurrent neural networks | 循环神经网络How RNN works : RNN 的工作原理RNN 的数学模型最新研究发展:RNN、LSTM等Transformers的出现GPT和ChatGPT2: 基本概念编码器解码器训练 Transformer …

解放创作生产力:30+实用AI工具汇总

除了ChatGPT&#xff0c;还有哪些好用AI工具&#xff1f; 带着这个问题&#xff0c;也为了解AIGC已经在哪些场景落地&#xff0c;我体验了30多个AI工具并且分享出来&#xff0c;希望对你有帮助。 文字 ChatGPT —— 解决任何问题 地址&#xff1a;https://chat.openai.com/ch…

《花雕学AI》ChatGPT的技术原理、算法竞争力、应用场景以及未来发展方向

一、ChatGPT是一个可以和你聊天的人工智能程序&#xff0c;它可以用文字回答你的问题&#xff0c;也可以根据你的提示写出文章、歌词、代码等内容。ChatGPT是由一个叫OpenAI的机构开发的&#xff0c;它使用了一种叫做GPT的技术&#xff0c;这种技术可以让它从互联网上学习大量的…

谷歌账号被封怎么办?谷歌账号解封申诉步骤请收好!

谷歌账号有多重要&#xff1f;相信很多跨境人和社媒营销人都会深有感悟的&#xff0c;谷歌账号可以说是国外互联网的一个通行证&#xff0c;国外非常多的网站都是支持使用谷歌账号登录的。 谷歌账号对企业进军海外市场是非常重要的存在&#xff0c;然而谷歌账号一旦操作不当是很…

ChatGPT MidJourney 生成动画故事

chatgpt是真的火了&#xff0c;chatgpt产生了一个划时代的意义——自chatgpt起&#xff0c;AI是真的要落地了。 chatgpt能做的事情太多了&#xff0c;多到最初开发模型的程序员自己&#xff0c;也没法说得清楚chatgpt都能做啥&#xff0c;似乎只要你能想得到&#xff0c;它都有…