在 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.so
到libpng.so.3
这样的符号链接确实有效。我没有系统的 root 访问权限,所以我不知道它是如何安装的。
【参考方案1】:
不确定它是否有帮助,但我前段时间遇到过类似的问题,/usr/lib/i386-linux-gnu
下缺少一些符号链接。或许您也面临类似的问题?
【讨论】:
嗨,正如上面帖子中提到的,符号链接的创建到目前为止是有效的。谢谢!以上是关于在 64 位机器上编译 32 位:/usr/bin/ld: 找不到 -l<someLibs>的主要内容,如果未能解决你的问题,请参考以下文章