如何解决“跳过不兼容的/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

我可能需要使用make的较旧版本(make381),这可能是因为内核较旧且已定制(2.6.22.19-39-sigma),并且目标是MIPS。我还在系统上安装了ncurses-static,glibc-static.i686和glibc-devel.i686。我需要make381兼容的libc.a吗?如果是这样,我在哪里可以找到它?如果没有,我下一步要去哪里修复这个版本?

完整的控制台输出在这里


@MarkPlotnick:看起来十字gcc好像没有崩溃,而是用来构建某些工具的PC(x86)。我在原始文章中扩展了控制台输出以显示此内容,并在此处添加了完整的控制台输出。
jacknad 2015年

Answers:


9

make本身可能与问题没有太大关系。这些症状是使用错误的工具链和/或库的典型症状。输出表明使用的链接器是Fedora库存ld,在64位Fedora上将意味着该工具链能够生成x86_64二进制文件。

skipping incompatible /usr/lib/libc.a

告诉你,链接器试图与链接/usr/lib/libc.a,但发现它(二进制)与编译代码的其余部分不兼容md5_x86_64.omfsrv_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位版本。可能没问题,但看起来有些奇怪。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.