问题描述:这个问题的表现是——在通过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]# 

这里表示 的错误 核心信息是 不兼容

直接说结论: 所谓 不兼容 说的是 库编译时的操作系统位数 和 链接库时 代码的编译环境下操作系统位数 ,两者不一致。

解决方式

  1. 如果有源码,请重新在统一位数下编译链接。

  2. 如果没有条件编译库文件,请修改 指定库文件 为对应位数下的库文件。

    1. 继续以上面的 spx 库举例, 他有提供对应的 x64 库文件,如下: 请添加图片描述
    libspx.a
    libspx_64.a
    
    1. 所以这里可以修改 链接指令 告诉 ld 链接对应版本 ,修改如下:
      1. 原始版本 请添加图片描述

      2. 修改后版本 请添加图片描述


服务器高级架构体系:https://ke.qq.com/course/417774?flowToken=1010783

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐