“호환되지 않는 /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)입니다. 원래 게시물에서 콘솔 출력을 확장하여 이것을 표시하고 전체 콘솔 출력을 여기에 추가했습니다 .
jacknad

답변:


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 비트 맛. 어느 것이 좋을지 모르지만 조금 이상하게 보입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.