在 64 位机器上编译 32 位:/usr/bin/ld: 找不到 -l<someLibs>

Posted

技术标签:

【中文标题】在 64 位机器上编译 32 位:/usr/bin/ld: 找不到 -l<someLibs>【英文标题】:Compiling 32bit on 64bit machine : /usr/bin/ld: cannot find -l<someLibs> 【发布时间】:2013-09-30 13:44:58 【问题描述】:

我目前正在尝试在 64 位 Ubuntu 12.04 机器上将一些代码编译为 32 位。如果我用正常的 make 命令编译代码,一切正常。

现在,为了将其编译为 32 位,我在 C- 和 CXXFLAGS 中添加了 -m32 选项。工作正常,直到我收到一些关于缺少库的错误,如-lGL-lGLU-lX11-lXext-lpng。好的,我在/usr/lib32/nvidia-304 中找到的第一个库(-lGL)是我通过-L 选项添加的。 其他库都在/usr/lib/i386-linux-gnu 中找到,但通过-L 添加并不能解决问题。

我在这里缺少什么?提前致谢!

这是导致错误的完整 gcc 命令

gcc myprog.o -m32 (...) -lX11 -lXext -lpng -lm -L/usr/lib/i386-linux-gnu -lGL -L/usr/lib32/nvidia-304 -lpthread -o myprog
/usr/bin/ld: cannot find -lX11
/usr/bin/ld: cannot find -lXext
/usr/bin/ld: cannot find -lpng

另一件事:在/usr/lib32/nvidia-304 中,我找到了libGL.so 加上libGL.la,而在/usr/lib/i386-linux-gnu 中,我只能找到.so 文件。

【问题讨论】:

只是为了澄清,/usr/lib/i386-linux-gnu中有一个libpng.so 是的,./usr/lib/i386-linux-gnu/libpng.so.3 存在。 嗯,看来@lolando 可能是在正确的轨道上。您需要一个libpng.so,它可能是指向libpng.so.3 的符号链接。您是否以 Ubuntu 支持的官方方式安装了 32 位库? 嗨,创建像libpng.solibpng.so.3 这样的符号链接确实有效。我没有系统的 root 访问权限,所以我不知道它是如何安装的。 【参考方案1】:

不确定它是否有帮助,但我前段时间遇到过类似的问题,/usr/lib/i386-linux-gnu 下缺少一些符号链接。或许您也面临类似的问题?

【讨论】:

嗨,正如上面帖子中提到的,符号链接的创建到目前为止是有效的。谢谢!

以上是关于在 64 位机器上编译 32 位:/usr/bin/ld: 找不到 -l<someLibs>的主要内容,如果未能解决你的问题,请参考以下文章

在 32 位和 64 位上编译,但校验和不同

如何在 64 位 RHEL 上编译 32 位应用程序?

如何在 64 位 osx 上编译 gcc 32 位应用程序

在 64 位机器上编译 tcpsplice

在运行 64 位 linux 的 Armv8 (aarch64) 上编译并运行 32 位二进制文​​件

BFD_RELOC_64:使用 C++ 在 32 位 linux 上编译汇编器指令