ld 找不到现有的 32 位 libm

ld 找不到现有的 32 位 libm

我只是在用尽我在谷歌上找到的所有其他答案后才发布。我仍然无法弄清楚我的问题。我尝试使用 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,解决了一些与代码相关的错误,并且它可以正确编译。感谢您的回复。

相关内容