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。

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

相关推荐
星辰云-11 分钟前
# Linux Centos系统硬盘分区扩容
linux·运维·centos·磁盘扩容
Hellc00722 分钟前
Nginx 高级 CC 与 DDoS 防御策略指南
运维·nginx·ddos
聽雨23731 分钟前
02每日简报20250704
linux·科技·金融·生活·社交电子·娱乐·媒体
feilieren38 分钟前
Docker 安装 Elasticsearch 9
运维·elasticsearch·docker·es
Maki Winster1 小时前
Peek-Ubuntu上Gif录制工具-24.04LTS可装
linux·ubuntu·peek
小皮侠2 小时前
nginx的使用
java·运维·服务器·前端·git·nginx·github
Maki Winster2 小时前
在 Ubuntu 下配置 oh-my-posh —— 普通用户 + root 各自使用独立主题(共享可执行)
linux·运维·ubuntu
守望时空332 小时前
Linux下KDE桌面创建自定义右键菜单
linux
l0sgAi3 小时前
vLLM在RTX50系显卡上部署大模型-使用wsl2
linux·人工智能
翻滚吧键盘3 小时前
debian及衍生发行版apt包管理常见操作
运维·debian