%20%EB%A9%A4%EB%B2%84%EA%B0%80%20%EA%B0%9D%EC%B2%B4%EA%B0%80%20%EC%95%84%EB%8B%88%EB%A9%B0%2C%20perf%20%ED%81%AC%EB%A1%9C%EC%8A%A4%20%EC%BB%B4%ED%8C%8C%EC%9D%BC%20%EC%8B%9C%20%EC%98%A4%EB%A5%98%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%95%A9%EB%8B%88%EB%8B%A4..png)
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를 실행하여 문제를 해결했습니다.