栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

error adding symbols: File in wrong format collect2: error: ld returned 1 exit status

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

error adding symbols: File in wrong format collect2: error: ld returned 1 exit status

某项目中需要用到mqtt.cpp,在寒武纪的盒子上编译mqtt.cpp。mqtt.cpp是依赖于mqtt.c的库和头文件的,前面我是先编译了mqtt.c,然后编译mqtt.cpp时用下面的cmake命令指定mqtt.c的库和头文件位置

cmake -DPAHO_WITH_SSL=OFF -DPAHO_MQTT_C_LIBRARIES=/home/chw/mqtt/paho.mqtt.c-master/install/lib64/libpaho-mqtt3a.so  -DPAHO_MQTT_C_INCLUDE_DIRS=/home/chw/mqtt/paho.mqtt.c-master/install/include/ DCMAKE_INSTALL_PREFIX=../install ..

然后编译的时候报了如下错误

/home/chw/mqtt/paho.mqtt.c-master/install/lib64/libpaho-mqtt3a.so: error adding symbols: File in wrong format
collect2: error: ld returned 1 exit status
src/CMakeFiles/paho-mqttpp3.dir/build.make:99: recipe for target 'src/libpaho-mqttpp3.so.1.2.0' failed
make[2]: *** [src/libpaho-mqttpp3.so.1.2.0] Error 1
CMakeFiles/Makefile2:89: recipe for target 'src/CMakeFiles/paho-mqttpp3.dir/all' failed
make[1]: *** [src/CMakeFiles/paho-mqttpp3.dir/all] Error 2
Makefile:151: recipe for target 'all' failed
make: *** [all] Error 2

看到这个错误的第一反应就想到这应该是因为arm的ld命令链接的库的格式却是x86格式的库,因此提示file in wrong format.

然后我去mqtt.c的install文件夹下用file命令看库的格式,

root@localhost:/home/chw/mqtt/paho.mqtt.c-master/install/lib64# file libpaho-mqtt3a.so.1.3.9
libpaho-mqtt3a.so.1.3.9: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped

可以看到这个库的格式果然是x86-64的,而我们的寒武纪盒子是arm架构的,因此格式不识别,这时候我突然发现怎么mqtt.c的install文件夹里面有lib和lib64两个文件夹,于是我去lib文件夹下用file命令看看格式 。

root@localhost:/home/chw/mqtt/paho.mqtt.c-master/install/lib# file libpaho-mqtt3a.so.1.3.9
libpaho-mqtt3a.so.1.3.9: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, BuildID[sha1]=1875ae7550029980d276187e883c154aa43c7356, not stripped

我惊喜的发现,lib文件夹下面的库竟然是ARM aarch64格式的,那么问题原因就找到了,我前面cmake配置的时候用的是lib64文件夹下面的库,所以将cmake配置时的mqtt.c的库路径换为lib文件夹即可。

cmake -DPAHO_WITH_SSL=OFF -DPAHO_MQTT_C_LIBRARIES=/home/chw/mqtt/paho.mqtt.c-master/install/lib/libpaho-mqtt3a.so  -DPAHO_MQTT_C_INCLUDE_DIRS=/home/chw/mqtt/paho.mqtt.c-master/install/include/ DCMAKE_INSTALL_PREFIX=../install ..

另外:在下面编译mqtt.cpp库的时候,编译出来的库发现也是x86的,后来发现原因是我直接把之前在X86上编译mqtt.cpp 的工程拷贝过来,然后重新cmake的,并没有从github上重新下载源码,我重新下载源码然后cmake之后,编译出来的cpp库就是aarch64格式的了。

 问题解决!

参考文献:

centos编译mqtt

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/630297.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号