我正在更新一些旧的 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
我已经理解这意味着架构与我试图构建的不匹配。
对于两个如此不同的项目,makefile 几乎相同,因此我似乎没有在那里做明显错误的事情,并且-m32
出现在对终端的调用gcc
和g++
终端中。什么可能导致这种差异?我应该担心,还是这种情况发生是典型的?
如果需要更多信息来回答,请告诉我;我不太确定,由于对 Linux 和 gcc 缺乏经验,所以提前道歉。
感谢 @Wyzard 和 @duskwuff 的提示。我确实能够通过file
在我的 .o 文件上使用来找到我的问题。这只是一个愚蠢的错误;我无意中恢复了对项目make
文件之一所做的更改,其中包括添加-m32
标志。我想我误解了“x86_64”库的用途,这让我很困惑(我认为这意味着“64 位机器的 32 位进程”)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句