2

Ubuntu 12.04 64 ビットで特定のプログラムをビルドしようとしています。プログラムは 32 ビットでコンパイルする必要があります。

ia32-libsgcc-multilibパッケージをインストールしました。

3 台の異なるコンピューターでコンパイルできましたが、このコンピューターでは奇妙なエラーで失敗します。なんらかの理由で libm.so が正しく取得されていないか、ライブラリに問題があります。

これは、Makefile から抽出されたため、実際に失敗したコンパイル行です。

gcc -o x86_32_obj/foo x86_32_obj/foomain.o -m32 -fPIC -fno-stack-protector -lc -lgcc -lm -lpthread -lrt -lstdc++ ../libfoo/lib/./libfii.x86_32.a

これが出力です

/usr/bin/ld: ../libfoo/lib/./libfoo.x86_32.a(NK_Meas.o): undefined reference to symbol 'expf@@GLIBC_2.0'
/usr/bin/ld: note: 'expf@@GLIBC_2.0' is defined in DSO /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib32/libm.so so try adding it to the linker command line
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib32/libm.so: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
make[1]: *** [foo] Error 2
make: *** [foo] Error 2
4

2 に答える 2

2

リンク順序に関して、このようなエラーを見たことがあります。リンク構成の最後に libm リンク ディレクティブを配置することで、エラーに対処できる場合があります。

これらの相互依存性はシステムに大きく依存しているため、同じコマンドが他のシステムでも機能するのはおそらくそのためです。

于 2013-10-05T15:58:59.883 に答える
0

問題が見つかりました。どうやら、私がリンクしようとしていたライブラリ ファイルは、別のバージョンの GCC を使用してコンパイルされたようです。それがどのように関連しているのか正確にはわかりませんが、gccコンパイラをライブラリで使用されているものに置き換えると、機能しました。

于 2013-10-09T01:17:31.697 に答える