paho-mqtt-c交叉编译

先提前说下,这些库不同的版本可能有较大差异(本人使用的openssl版本是3.3.0,paho-mqtt-c版本是1.3.13),如果发现跟自己的环境不一致,请酌情参考

1. 下载源代码

有外网可以去github上下载,这里贴一个下载好的 paho-mqtt-c

2. 在根目录下建一个build文件夹,切换到里面,再建一个install文件夹

paho.mqtt.c$ mkdir build/install -p
paho.mqtt.c$ cd build/
paho.mqtt.c/build$

3. 如果mqtt不需要SSL安全认证,可以直接执行(注意把编译工具链路径改成自己的),如果需要SSL认证,请跳6

paho.mqtt.c/build$ cmake .. \
  -DPAHO_WITH_SSL=OFF \
  -DPAHO_BUILD_DOCUMENTATION=OFF \
  -DPAHO_BUILD_SAMPLES=OFF \
  -DPAHO_BUILD_STATIC=OFF \
  -DPAHO_BUILD_SHARED=ON \
  -DCMAKE_INSTALL_PREFIX=./install \
  -DCMAKE_C_COMPILER=/path/to/cross_comiler_tool/bin/xxxxxx-xxxxxx-xxxx-xxx-gcc \
  -DCMAKE_CXX_COMPILER=/path/to/cross_comiler_tool/bin/xxxxxx-xxxxxx-xxxx-xxx-gcc

4. 然后执行make & make install

paho.mqtt.c/build$ make & make install

5. 查看文件

paho.mqtt.c/build$ tree install -L 2
install
├── bin
│   └── MQTTVersion
├── include
│   ├── MQTTAsync.h
│   ├── MQTTClient.h
│   ├── MQTTClientPersistence.h
│   ├── MQTTExportDeclarations.h
│   ├── MQTTProperties.h
│   ├── MQTTReasonCodes.h
│   └── MQTTSubscribeOpts.h
├── lib
│   ├── cmake
│   ├── libpaho-mqtt3a.so -> libpaho-mqtt3a.so.1
│   ├── libpaho-mqtt3a.so.1 -> libpaho-mqtt3a.so.1.3.13
│   ├── libpaho-mqtt3a.so.1.3.13
│   ├── libpaho-mqtt3c.so -> libpaho-mqtt3c.so.1
│   ├── libpaho-mqtt3c.so.1 -> libpaho-mqtt3c.so.1.3.13
│   └── libpaho-mqtt3c.so.1.3.13
└── share
    └── doc

6 directories, 14 files

6. 如果需要SSL认证,则需要先编译openssl库,方法可参考:openssl交叉编译

编译完openssl后,我们需要把它的头文件和库文件路径指定给paho-mqtt-c,由于paho-mqtt-c的编译是cmake控制的,我们可以直接用openssl提供的cmake文件,它在opensll的install目录下:lib64/cmake/OpenSSL/OpenSSLConfig.cmake

按理说有了这个文件,我们可以直接在cmake中调用find_package()来完成加载,但本人在实际操作时遇到很多问题(可能是版本问题),下面是本人探索的解决方法(可能还有更好的,欢迎分享)

6.1 先修改OpenSSLConfig.cmake文件

 75 # Directories and names 修改前
 76 #set(OPENSSL_INCLUDE_DIR "${_ossl_prefix}/include")
 77 #set(OPENSSL_LIBRARY_DIR "${_ossl_prefix}/lib64")
 78 #set(OPENSSL_ENGINES_DIR "${_ossl_prefix}/install/lib64/engines-3")
 79 #set(OPENSSL_MODULES_DIR "${_ossl_prefix}/install/lib64/ossl-modules")
 80 #set(OPENSSL_RUNTIME_DIR "${_ossl_prefix}/bin")
 81 #修改后
 82 set(OPENSSL_INCLUDE_DIR "${_ossl_prefix}/install/include")
 83 set(OPENSSL_LIBRARY_DIR "${_ossl_prefix}/install/lib64")
 84 set(OPENSSL_ENGINES_DIR "${_ossl_prefix}/install/lib64/engines-3")
 85 set(OPENSSL_MODULES_DIR "${_ossl_prefix}/install/lib64/ossl-modules")
 86 set(OPENSSL_RUNTIME_DIR "${_ossl_prefix}/install/bin")

6.2 修改paho-mqtt-c库中src/CMakeLists.txt(注意要改成自己的路径)

194     #find_package(OpenSSL REQUIRED)
195     #注释上面这行,改为下面的
196     find_package(OpenSSL REQUIRED CONFIG PATHS "/path/to/openssl/install/lib64/cmake/OpenSSL")

6.3 执行cmake(注意路径都要改成自己的)

  paho.mqtt.c/build$ cmake .. \
  -DPAHO_WITH_SSL=ON \
  -DPAHO_BUILD_DOCUMENTATION=OFF \
  -DPAHO_BUILD_SAMPLES=OFF \
  -DPAHO_BUILD_STATIC=OFF \
  -DPAHO_BUILD_SHARED=ON \
  -DCMAKE_INSTALL_PREFIX=./install \
  -DCMAKE_C_COMPILER=/path/to/cross_comiler_tool/bin/xxxxxx-xxxxxx-xxxx-xxx-gcc \
  -DCMAKE_CXX_COMPILER=/path/to/cross_comiler_tool/bin/xxxxxx-xxxxxx-xxxx-xxx-g++ \
  -DOpenSSL_DIR=/path/to/openssl/install/lib64/cmake/OpenSSL \

6.4 make & make install

paho.mqtt.c/build$ make & make install

6.5 查看安装结果

paho.mqtt.c/build$ tree install -L 2
install
├── bin
│   └── MQTTVersion
├── include
│   ├── MQTTAsync.h
│   ├── MQTTClient.h
│   ├── MQTTClientPersistence.h
│   ├── MQTTExportDeclarations.h
│   ├── MQTTProperties.h
│   ├── MQTTReasonCodes.h
│   └── MQTTSubscribeOpts.h
├── lib
│   ├── cmake
│   ├── libpaho-mqtt3a.so -> libpaho-mqtt3a.so.1
│   ├── libpaho-mqtt3a.so.1 -> libpaho-mqtt3a.so.1.3.13
│   ├── libpaho-mqtt3a.so.1.3.13
│   ├── libpaho-mqtt3as.so -> libpaho-mqtt3as.so.1
│   ├── libpaho-mqtt3as.so.1 -> libpaho-mqtt3as.so.1.3.13
│   ├── libpaho-mqtt3as.so.1.3.13
│   ├── libpaho-mqtt3c.so -> libpaho-mqtt3c.so.1
│   ├── libpaho-mqtt3c.so.1 -> libpaho-mqtt3c.so.1.3.13
│   ├── libpaho-mqtt3c.so.1.3.13
│   ├── libpaho-mqtt3cs.so -> libpaho-mqtt3cs.so.1
│   ├── libpaho-mqtt3cs.so.1 -> libpaho-mqtt3cs.so.1.3.13
│   └── libpaho-mqtt3cs.so.1.3.13
└── share
    └── doc

6 directories, 20 files

你可以从paho mqtt在GitHub上的官方地址下载Linux C的paho-mqtt源码,地址为https://github.com/eclipse/paho.mqtt.c/releases。你可以选择合适的版本进行下载,并解压。一旦解压完成,你可以修改makefile文件,根据你的需求进行配置和编译。如果你使用ARM架构,可以使用命令"arm-linux-gnueabihf-gcc"编译可执行文件,如下所示: ``` arm-linux-gnueabihf-gcc MQTTClient_subscribe.c -o test_ssl -L./ libpaho-mqtt3cs-static.a libssl.a libcrypto.a -lpthread -ldl ``` 如果你使用x86架构,可以使用命令"gcc"编译可执行文件,如下所示: ``` gcc MQTTClient_subscribe.c -o test -L./ libpaho-mqtt3cs-static.a libssl.a libcrypto.a -lpthread -ldl ```<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [openssl源码和paho-mqtt源码的x86_64以及交叉编译arm架构静态库-](https://blog.csdn.net/weixin_45146364/article/details/130419180)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [ubuntu交叉编译移植paho-mqtt-c](https://blog.csdn.net/qq_42315062/article/details/125886587)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值