我只是在用尽我在谷歌上找到的所有其他答案后才发布。我仍然无法弄清楚我的问题。我尝试使用 g++ 在 Red Hat 机器上进行 32 位编译。这是我的命令:
BITS=32
OS=`uname -s`
g++ -D$OS -O3 -Wall -pipe -m$BITS -c *.cpp
但链接器找不到库:
/usr/bin/ld: cannot find -lm
collect2: ld returned 1 exit status
但是... 32 位 libm.so 存在于通常的位置。
>file /usr/lib/libm.so
/usr/lib/libm.so: symbolic link to `../../lib/libm.so.6'
>file /lib/libm.so.6
/lib/libm.so.6: symbolic link to `libm-2.12.so'
>file /lib/libm-2.12.so
/lib/libm-2.12.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (GNU/Linux), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
我尝试了简单的方法,例如检查 /usr/lib 是否实际上仍然列在 LD_LIBRARY_PATH 中,然后尝试将 -lm 添加到 g++ 命令中。
这些是所有已安装的 glibc 软件包(glibc 提供 libm.so 和 libm.a):
compat-glibc.x86_64 1:2.5-46.2
compat-glibc-headers.x86_64 1:2.5-46.2
glibc.i686 2.12-1.132.el6
glibc.x86_64 2.12-1.132.el6
glibc-common.x86_64 2.12-1.132.el6
glibc-devel.i686 2.12-1.132.el6
glibc-devel.x86_64 2.12-1.132.el6
glibc-headers.x86_64 2.12-1.132.el6
glibc-utils.x86_64 2.12-1.132.el6
我还遇到了运行的建议:
>readelf -a /usr/lib/libm.so | grep PATH
但它什么也没输出。
还有其他想法或想法吗?当出现其他问题时是否可以收到链接器的投诉?非常感谢任何回应。
答案1
嗯,我很傻。这确实是--static
我的链接命令中的选项。代替静态库,我摆脱了--static
,解决了一些与代码相关的错误,并且它可以正确编译。感谢您的回复。