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


13

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

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

完全なコンソール出力はこちらです。


@MarkPlotnick:クロスgccがクラッシュしているようには見えませんが、いくつかのツールのビルドに使用されているPC(x86)がクラッシュしています。これを表示するために元の投稿のコンソール出力を拡張し、ここに完全なコンソール出力を追加しました。
ジャックナッド

回答:


9

makeそれ自体は問題とはあまり関係ありません。症状は、間違ったツールチェーンやライブラリを使用する典型的なものです。出力は、使用中のリンカーがストックFedora ldであることを示しています。これは、64ビットFedoraではx86_64バイナリを生成できるツールチェーンを意味します。

skipping incompatible /usr/lib/libc.a

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

あなたの場合の驚くべきことは(少なくとも私にとって)これは:

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ビットの両方のフレーバーです。大丈夫かもしれませんが、少し奇妙に見えます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.