ubuntu 和 RV1126 交叉编译Mosqutiio-1.6.9

最近需要交叉编译mosquitto,遇到一些小问题记录一下。

1.众所周知使用它自带的Makefile编译的时候,只需要在编译前,指定它config.mk中的变量:CFLAGS头文件路径 和 LDFLAGS库文件路径就ok,例子如下:

cpp 复制代码
export CFLAGS="-I/home/.../openssl/...  -I/home/.../uuid/..."
export LDFLAGS="-L/home/.../uuid/lib -L/home/.../openssl/lib  -luuid -lcrypto -lssl"
make -j8
make install

//如果你想指定安装路径的话 试一试这个
...
...
make prefix=/...
make install

2.当前,我们单独编译mosquitto的话是非常简单的,但是我们要是想把它放到其他项目的cmakelist架构中呢。直接查找当然方便,但是要是外部库比较多,移植和维护起来就会变的比较麻烦,所以我们使用 ExternalProject_Add 来在项目中构建编译Mosquitto。

我用的是Mosquitto-1.6.9的源码,地址

Tags · eclipse-mosquitto/mosquitto · GitHub

使用cmakelist组织的时候发现,/lib/目录下messages_mosq.c源文件缺少了/src/deps目录下的utilst.h文件,只需要做一个【复制】和【添加进/lib目录下的cmakelist文件中】即可。

众所周知,使用ExternalProject_Add的时候我们可以使用cmake传入参数,我这里传入了上层的构建install地址,然后发现mosquitto内部自己find_package了openssl,并且没看到需要uuid,uuid先不管,openssl的话交叉编译过程中,如果本地系统路径下已经安装了x86或者自己系统的openssl,架构版本和目标编译可能不太一致。

这里我多次使用-DCMAKE_PREFIX_PATH和-DOPENSSL_ROOT_DIR来指定openssl的所有路径,但是都失败了,貌似是交叉编译工具目录下就有x86的openssl库,所以find_package直接就找到了x86的ssl和crypto,指定似乎没有用,怎么办呢???

那我就不find_package了,我把mosquitto-1.6.9的源码中的最上层的cmakelist中自己设置OPENSSL_INCLUDE_DIR和OPENSSL_LIBRARY,因为/src和/lib目录下cmakelist构建使用了openssl库中的ssl和crypto,所以这里我做一个分解,写一个头文件地址和两个库文件地址,直接找到库文件

cpp 复制代码
set(OPENSSL_SSL_LIBRARY "${OPENSSL_ROOT_DIR}/lib/libssl.so")
set(OPENSSL_CRYPTO_LIBRARY "${OPENSSL_ROOT_DIR}/lib/libcrypto.so")
  • OPENSSL_ROOT_DIR是从外层传 ExternalProject_Add的时候传进来的

到这一步就该把find_package(openssl)注释掉了,然后把/src和/lib两个目录下的cmakelist中的OPENSSL_LIBRARY换成OPENSSL_SSL_LIBRARY 和 OPENSSL_CRYPTO_LIBRARY。

我都想不到怎么还能编译不过???

相关推荐
海棠蚀omo1 小时前
解读Linux进程的“摩尔斯电码”:信号产生的原理与实践,掌控进程的生死时速
linux·操作系统
YouEmbedded6 小时前
解码UDP
linux·udp
w***48827 小时前
Linux安装redis
linux·运维·redis
wanhengidc8 小时前
深度了解云手机是什么
运维·服务器·科技·智能手机·云计算
python百炼成钢8 小时前
28.嵌入式 Linux LED 驱动开发实验
linux·运维·驱动开发
西风未眠10 小时前
高效编辑之vi/vim常用快捷键汇总
linux·编辑器·vim
_Stellar10 小时前
Linux 服务器管理 根目录文件夹权限设置 基于用户组实现安全共享
linux·服务器·安全
LUCIFER11 小时前
驱动开发:详细分析 DTB、DTS、DTSI、DTBO 的区别、用途及它们之间的关系
linux·服务器·驱动开发
BullSmall12 小时前
Test Matrix:测试矩阵(IT 领域定义 + 设计实践 + 华为场景应用)
运维·服务器
liuyao_xianhui12 小时前
版本控制器git--gdb/cgdb
linux·运维·服务器·git