ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux环境下交叉编译mosquitto及其依赖

2021-01-22 11:29:40  阅读:1272  来源: 互联网

标签:opt Linux OpenSSL 编译 mosquitto linux arm


本文的目录索引

文章目录

Linux环境下交叉编译mosquitto

  • 1.相关依赖(两个库外加一个交叉编译工具链)

MQTT协议依赖于OpenSSL库,以及第三方客户端库,此处选择mosquitto库,并进行交叉编译,此次交叉编译工具链为arm-none-linux-gnueabi,其他工具链可以参考该方法生成所需的mqtt动态库及相关文件。

  • 2.开发环境以及目标环境说明

本次的开发机器为VMware虚拟机的Ubuntu系统,目标机器为SIMCom公司的高通系列SIM7600CE-T。

  • 3.准备适用的交叉编译工具链

首先在开发机器上安装目标机器的编译工具链arm-none-linux-gnueabi下载地址可以自行搜索,如由爱好者提供的:某度网盘的交叉编译工具链资源链接 ,或者通过官方渠道(不推荐):官方提供的交叉编译工具链资源链接
假设你使用的是解压版本的工具链,解压后放在自定义目录/home/forwardxiang/arm_linux下,便拥有了目标机器的编译工具链,使用命令查看其路径:which arm-none-linux-gnueabi-gcc,之后需要使用该绝对路径编译OpenSSL和mosquitto。

  • 4.获取OpenSSL和mosquitto源码

获取OpenSSL和mosquitto源码并解压,先编译OpenSSL再编译mosquitto(由依赖关系决定先后顺序)。推荐源码:
OpenSSL官方:wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2e.tar.gz
Mosquitto官方:wget https://mosquitto.org/files/source/mosquitto-1.4.8.tar.gz

  • 5.创建编译源码后的输出文件路径

先创建自定义目录用于存放编译后生成的输出文件,这里创建两个:/opt/openssl与/opt/mosquitto

  • 6.编译OpenSSL并输出文件

在解压后的OpenSSL目录下执行配置文件并指定输出路径:./config no-asm shared --prefix=/opt/openssl
然后在Makefile文件中修改编译工具链路径:

CC = /opt/arm_linux/bin/arm-none-linux-gnueabi-gcc 
AR = /opt/arm_linux/bin/arm-none-linux-gnueabi-ar $(ARFLAGS) r
RANLIB =/opt/arm_linux/bin/arm-none-linux-gnueabi-ranlib
删除文中含有-m64的内容,一般有两处。

然后执行编译make并安装sudo make install。如果无误则会在输出文件夹生成mosquitto依赖的输出文件。

  • 7.编译mosquitto源码并输出文件

进入mosquitto源码并修改配置文件config.mk,关闭如下功能(减少依赖文件):
WITH_SRV:=no 和WITH_UUID:=no和WITH_WEBSOCKETS:=no和WITH_DOCS:=no
并在功能配置后紧接着指定依赖openssl头文件以及库文件路径:

CFLAGS += -I/opt/openssl/include
LDFLAGS += -L/opt/openssl/lib -lssl -lcrypto

在该配置文件中最后几行:
指定编译工具链脚本位置 :STRIP?=/opt/arm_linux/bin/arm-none-linux-gnueabi-strip
找到输出文件的路径并修改为自定义的目录:prefix=/opt/mosquitto
然后在终端窗口的编译命令中指定编译工具链(注意下面是一条命令):

make CC=/opt/arm_linux/bin/arm-none-linux-gnueabi-gcc \
CXX=/opt/arm_linux/bin/arm-none-linux-gnueabi-g++

最后再执行安装命令:sudo make install 如果报/usr/bin/pod2man相关的错误,可以执行删除命令:sudo rm /usr/bin/pod2man 再重新安装。

  • 8.在目标工程中如何使用输出文件

如果上述步骤都顺利(那你太幸运了,一般来说嵌入式编译都会有各种问题),你可以将自定义文件夹/opt/mosquitto拷贝到目标机器中,并使用位于该文件夹的子文件夹./bin/中的可执行文件进行测试。
如果测试结果表明能在目标平台上正确运行,那么正式使用时只需要移植输出文件中的lib文件夹和include文件夹:
移植lib文件夹下的动态库文件至目标工程中的动态库文件夹下,移植文件夹include文件夹下的头文件至目标工程中的头文件夹下。并修改目标工程的Makefile文件添加两者所在的工程路径。

标签:opt,Linux,OpenSSL,编译,mosquitto,linux,arm
来源: https://blog.csdn.net/qq_32770097/article/details/112980417

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有