我正在更新一些旧的C ++项目,这是第一次在64位Linux机器上构建,而且我没有太多的Linux经验。我需要将所有内容构建为32位二进制文件,因此我在编译器和链接器标志中使用-m32
构建所有内容。我发现,当链接到它们的依赖项时,有些必须与i386共享对象链接,有些必须与x86_64共享对象链接。如果我只在链接路径(-L/path/to/wrong/folder
)中包含错误的文件夹,则说明
/usr/bin/ld: skipping incompatible xxx.so when searching for -lxxx
我已经明白了means the architecture doesn't match what I'm trying to build。
两个这样的不同项目的makefile几乎完全相同,所以看起来我没有做出明显错误的事情,并且在-m32
和{{1}的调用中出现了gcc
在终端。什么可能导致这种差异?我应该担心,还是典型的事情发生?
如果需要更多信息,请告诉我们;我不太确定,由于缺乏Linux和gcc的经验,所以请提前道歉。
答案 0 :(得分:0)
感谢@Wyzard和@duskwuff的提示。通过在.o文件中使用file
,我确实能够找到问题。这只是一个愚蠢的错误。我无意间恢复了对项目的make
文件之一所做的更改,其中包括添加-m32
标志。我想我误解了“ x86_64”库的用途,这让我感到困惑(我以为这意味着“ 64位计算机的32位进程”)。