问题描述:这个问题的表现是——在通过g++或者gcc编译链接可执行程序的时候因为代码使用需要,需要添加对应 的三方库,这个时候在编译指令中 需要添加 动态库添加指令 告诉 ld 链接 对应名称的动态库、或者静态库。
而在 ld 去指定路径下寻找时,这个路径下存在对应的动态库、静态库但是 这个时候,显示连接失败,这里以 我所使用的剑桥库 libspx.a
为例 展示错误信息为:
[root@localhost SPxBitmap]# make
gcc -o spxbitmap spxbitmap.o \
-L../..//Libs/linux -lspx \
-lc -lstdc++ -lrt -lz -lm -lpthread -lirc
/usr/bin/ld: 当搜索用于 ../..//Libs/linux/libspx.a 时跳过不兼容的 -lspx
/usr/bin/ld: 找不到 -lspx
collect2: 错误:ld 返回 1
make: *** [spxbitmap] 错误 1
[root@localhost SPxBitmap]#
这里表示 的错误 核心信息是 不兼容
。
直接说结论: 所谓 不兼容
说的是 库编译时的操作系统位数 和 链接库时 代码的编译环境下操作系统位数 ,两者不一致。
解决方式:
-
如果有源码,请重新在统一位数下编译链接。
-
如果没有条件编译库文件,请修改 指定库文件 为对应位数下的库文件。
- 继续以上面的 spx 库举例, 他有提供对应的 x64 库文件,如下:
libspx.a libspx_64.a
- 所以这里可以修改 链接指令 告诉
ld
链接对应版本 ,修改如下:-
原始版本
-
修改后版本
-
- 继续以上面的 spx 库举例, 他有提供对应的 x64 库文件,如下: