【发布时间】:2017-09-19 00:55:35
【问题描述】:
我正在更新一些旧的 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 出现在终端中对gcc 和g++ 的调用中。什么可能导致这种差异?我应该担心,还是这种情况很常见?
如果需要更多信息来回答,请告诉我;由于对Linux和gcc缺乏经验,我不太确定,所以提前道歉。
【问题讨论】:
-
如果您正在构建 32 位可执行文件,则必须链接到 32 位库。如果您在链接到 32 位库时遇到错误,则说明过程中出现了问题,您需要向我们提供更多详细信息。
-
在您的
.o文件上运行file,它会告诉您它们是 32 位还是 64 位。 (如果您使用-m32构建,它们应该是 32 位的。)