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