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를 실행하여 문제를 해결했습니다.