「互換性のない/usr/lib/libc.aをスキップする」を修正する方法

「互換性のない/usr/lib/libc.aをスキップする」を修正する方法

64ビットFedora 16(Verne)で組み込みLinuxターゲットを構築しようとすると、次のエラーが発生します。

make[3]: Entering directory `/export/home/git/minerva-5.x/third_party/multifiles'
mips-linux-gnu-gcc -EL -O -D_GNU_SOURCE -Wall -isystem /export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/include   -c -o md5.o md5.c
mips-linux-gnu-gcc -EL -O -D_GNU_SOURCE -Wall -isystem /export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/include   -c -o bitmapfs.o bitmapfs.c
mips-linux-gnu-gcc -EL -O -D_GNU_SOURCE -Wall -isystem /export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/include   -c -o mfcln.o mfcln.c
mips-linux-gnu-gcc -EL -Wl,-rpath /export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/lib -L/export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/lib -o mfcln md5.o bitmapfs.o mfcln.o mulfiles.h mulfiles_msg.h md5.h bitmapfs.h
gcc -O -Wall -m32 -c -o md5_x86_32.o md5.c
gcc -O -Wall -m32 -c -o mfsrv_x86_32.o mfsrv.c
gcc -O -m32 -o mfsrv32 md5_x86_32.o mfsrv_x86_32.o
gcc -O -m32 -static -o mfsrv32-static md5_x86_32.o mfsrv_x86_32.o
gcc -O -Wall -c -o md5_x86_64.o md5.c
gcc -O -Wall -c -o mfsrv_x86_64.o mfsrv.c
gcc -O -o mfsrv64 md5_x86_64.o mfsrv_x86_64.o
gcc -O -static -o mfsrv64-static md5_x86_64.o mfsrv_x86_64.o
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/4.6.3/../../../libc.a when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/libc.a when searching for -lc
/usr/bin/ld: cannot find -lc
collect2: ld returned 1 exit status
make[3]: *** [mfsrv64-static] Error 1

以前のバージョンの make(make381) を使用する必要があります。それはおそらくカーネルが古くてカスタマイズされていて(2.6.22.19-39-sigma)、MIPSをターゲットにしているからです。また、私のシステムにはncurses-static、glibc-static.i686、glibc-devel.i686がインストールされています。 make381には互換性のあるlibc.aが必要ですか?では、どこで見つけることができますか?そうでない場合、このビルドを編集するにはどこに行くべきですか?

コンソール全体の出力は次のとおりです。ここ

ベストアンサー1

makeそれ自体可能問題とあまり関係ありません。これらの症状は、誤ったツールチェーンおよび/またはライブラリを使用したときに現れる典型的な現象です。出力は、使用しているリンカーがデフォルトのFedoraであることを示しますld。これは、64ビットFedoraでx86_64バイナリを生成できるツールチェーンを意味します。

skipping incompatible /usr/lib/libc.a

リンカーがリンクしようとしましたが、/usr/lib/libc.a残りのコンパイル済みコードと(バイナリ)互換性がないことがわかりました。これは通常、アーキテクチャの不一致が原因で発生します。この場合、ビルドシステムは64ビットオブジェクトファイルを32ビットライブラリに関連付けようとします(32ビットバイナリに対して同じコマンドが正しく実行されることに注意してください)。したがって、コンパイラは64ビットバイナリをリンクすると正しいオプションが得られないようです。デバッグの最初のステップとして手動でビルドしてみてください。つまり、ビルドツリーで失敗したコマンドを手動で実行することです。md5_x86_64.omfsrv_x86_64.o-m32

あなたの場合でも、同じように驚くべきことは(少なくとも私にとっては)次のとおりです。

mips-linux-gnu-gcc -EL -Wl,-rpath /export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/lib -L/export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/lib -o mfcln md5.o bitmapfs.o mfcln.o mulfiles.h mulfiles_msg.h md5.h bitmapfs.h
gcc -O -Wall -m32 -c -o md5_x86_32.o md5.c

つまり、一部のビルドはクロスツールチェーンを使用し、一部のビルドはデフォルトのツールチェーンを使用し、64ビットバージョンと32ビットバージョンがあります。おそらく大丈夫だと思いますが、少し奇妙に見えます。

おすすめ記事