cmake Linux报错skipping incompatible的解决

在进行arm8交叉编译的时候,发现在link时报错:

/usr/bin/ld: skipping incompatible libxxx 

这个问题可能有多个原因,解决排查顺序:

1.因为是交叉编译,所以这里的连接器/usr/bin/ld是X86下的,显然不对。

2.检查cmakelists.txt文件里有没有重新设定 CMAKE_LINKER到交叉编译工具对应的ld 文件的路径

3.若CMAKE_LINKER已经设定正确,须检查COMPILER的路径是否设置正确。比如CMAKE_CXX_COMPILER 和 CMAKE_C_COMPILER

我这里遇到的原因是 路径设置多了空格:(红色部分)

SET(CMAKE_C_COMPILER "  /home/xxx/host/bin/aarch64-buildroot-linux-gnu-gcc.br_real")

这样导致系统使用了默认的compiler/usr/bin/gcc, 将空格去掉,则可以使用到正确的compiler和linker去编译,错误消失。

另外,如何确定编译某个模块具体用的啥命令呢?可以到build目录下模块的目录下查找link.txt文件,里面记录了具体的最终编译链接命令。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Q: '/usr/bin/ld: skipping incompatible' 是什么意思? A: 这是一个编译器错误,意味着编译器在链接时跳过了不兼容的目标文件。可能是因为目标文件是用不兼容的编译器或库编译的,需要使用兼容的编译器或库重新编译目标文件。 ### 回答2: 在使用编译器编译代码时,有时会遇到提示“/usr/bin/ld: skipping incompatible”这个错误。这是因为编译器在链接库时发现部分库文件有兼容性问题,无法与当前系统兼容,从而导致编译失败。 出现这个问题的原因是编译器无法找到适配当前系统的库文件,这可能是由于库文件版本过旧或者过新所导致的。在解决这个问题时,我们需要寻找与当前系统相适配的库文件来进行链接。 首先,我们需要确定当前系统的操作系统版本、CPU架构类型等信息。然后,我们可以在官方的库文件仓库或者第三方库文件仓库中搜索与当前系统版本和CPU架构类型相适配的库文件,选择适配的库文件进行下载。 下载完成后,我们可以手动将库文件放置到对应的系统路径下,或者使用软件包管理器来进行安装。在成功安装了适配的库文件后,我们再次进行编译时就可以避免出现“/usr/bin/ld: skipping incompatible”这个错误了。 总之,在遇到这种错误时,我们需要先了解当前系统的相关信息,然后寻找并安装适配的库文件来解决问题。这样才能保证编译过程的正常进行和代码的正确性。 ### 回答3: 当我们在编译程序的时候,有时候会出现类似于“/usr/bin/ld: skipping incompatible”的错误信息,这个错误信息通常是指一个链接器在尝试将一个非本机架构的对象文件连接到当前的主机架构时发生的错误。 这种错误通常会出现在编译跨平台的程序时,例如我们的程序在本地开发环境是 x86 架构,但是我们在编译时需要将程序打包成 Android 的 apk 文件,这时就需要使用 Android 系统对应的 NDK 来编译。如果我们的本机环境与目标架构不一致时,就会出现这个错误。 正确的处理方法是,确定自己的开发环境和目标架构是否一致,如果不一致,需要重新选择开发环境和相应的编译器;如果开发环境和目标架构一致,可以考虑重新编译源代码或者寻找适合当前架构的已编译库文件。 总之,在编译过程中出现“/usr/bin/ld: skipping incompatible”的错误说明编译器不能识别当前的目标架构,需要对开发环境和编译器进行检查,并找到适合当前架构的编译器和库文件进行编译,才能解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值