아카이브의 ../lib/lk/liblk.a(debugfs.o) 멤버가 객체가 아니며, perf 크로스 컴파일 시 오류가 발생합니다.

아카이브의 ../lib/lk/liblk.a(debugfs.o) 멤버가 객체가 아니며, perf 크로스 컴파일 시 오류가 발생합니다.

arm의 성능 도구를 교차 컴파일하려고 하면 다음 오류가 발생합니다.

../lib/lk/liblk.a: member ../lib/lk/liblk.a(debugfs.o) in archive is not an object

내가 뭘 한거지?

cd stable-kernel/tools/perf
make ARCH=arm CROSS_COMPILE=arm-linux-gnu-eabi-gcc

놀랍게도 실제로 보니 회원이더군요.

ar -t ../lib/lk/liblk.a 
debugfs.o 

이 비정상적인 행동의 이유는 무엇일까요?

추신: x86용으로 컴파일할 때는 이런 일이 발생하지 않았습니다(일반적인 방법으로 make 후 make install).

답변1

liblk.a를 ARM elf 형식으로 컴파일하려면 CC를 ARM 도구 체인으로 내보내야 합니다.

export CC=arm-linux-gnueabihf-gcc

답변2

이는 liblk.a가 x86용으로 빌드되고 makescript가 ARM/필수 플랫폼용으로 빌드된 liblk.a를 검색하기 때문입니다. 따라서 명령 파일 liblk.a를 통해 파일 형식을 봐도 liblk에 대한 멤버가 있습니다. ㅏ. a 파일이 x86용으로 빌드되었음을 분명히 보여주므로 오류가 발생합니다!

그래서 이 문제를 극복하기 위해 먼저 ARM용 liblk.a를 빌드한 후 makescript를 실행하여 문제를 해결했습니다.

관련 정보