ldは既存の32ビットlibmを見つけることができません。

ldは既存の32ビットlibmを見つけることができません。

Googleが見つけた他のすべての回答を使い果たした後にのみ、この記事を投稿しています。私はまだ私の問題を理解できません。私は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にまだリストされていることを確認し、g ++コマンドに-lmを追加するなどの簡単な操作を試しました。

以下はすべてインストールされた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いくつかのコード関連のエラーを修正し、正しくコンパイルされました。ご回答ありがとうございます。

おすすめ記事