是什么决定了在64位机器上构建的32位库是否需要x86_64或i386依赖?

时间:2017-04-21 21:55:17

标签: c++ linux gcc linker g++

我正在更新一些旧的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的经验,所以请提前道歉。

1 个答案:

答案 0 :(得分:0)

感谢@Wyzard和@duskwuff的提示。通过在.o文件中使用file,我确实能够找到问题。这只是一个愚蠢的错误。我无意间恢复了对项目的make文件之一所做的更改,其中包括添加-m32标志。我想我误解了“ x86_64”库的用途,这让我感到困惑(我以为这意味着“ 64位计算机的32位进程”)。