crosstool-ng를 사용하여 ARM Cortex-A8용 크로스 컴파일러를 구축했지만 가장 간단한 프로그램을 컴파일하는 데 몇 가지 문제가 있습니다.
컴파일해 보세요 test.h
:
$ arm-linux-gnueabihf-gcc -o prog test.c
test.c:1:20: fatal error: stdlib.h: No such file or directory
#include <stdlib.h>
^
compilation terminated.
특정 디렉터리에 툴체인을 생성한 다음 이를 내 홈 디렉터리의 다른 폴더에 복사했습니다. 이 툴체인은 다른 사람들이 애플리케이션을 개발하는 데 사용해야 하므로 좀 더 "합리적인" 경로로 옮겼습니다.
그 후 툴체인을 사용하여 원래 생성된 경로에서 직접 동일한 코드를 컴파일해 보았더니 제대로 작동했습니다. 나는 이것이 대상 sysroot에 대한 경로와 관련이 있다고 의심했지만, 확인한 후에 --print-sysroot
두 경로 모두 툴체인 바이너리의 현재 위치와 일치하는 것 같습니다. (참고: $PATH
다른 디렉터리 앞에 복사된 툴체인의 경로를 추가합니다 .)
$ /home/guilherme/Toolchain/bin/arm-linux-gnueabihf-gcc --print-sysroot # Copy
/home/guilherme/Toolchain/bin/../arm-cortex_a8-linux-gnueabihf/sysroot
$ /home/guilherme/Development/toolchain/tools/arm-cortex_a8-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc --print-sysroot # Original
/home/guilherme/Development/toolchain/tools/arm-cortex_a8-linux-gnueabihf/arm-cortex_a8-linux-gnueabihf/sysroot
이 문제에 대한 도움이 필요하십니까? 다른 폴더/머신으로 이동/복사할 수 있는 툴체인을 생성할 수 있는 옵션이 ct-gn에 있습니까?
답변1
문제가 무엇인지 알아보세요.
make headers_install ARCH=arm HDR_INSTALL_PATH=${TOOLCHAIN_SYSROOT}/usr
툴체인 헤더를 업데이트하는 데 사용합니다 . 그러나 이는 복사된 헤더 이외의 모든 헤더를 ${KERNEL_PATH}/include/linux
" ${TOOLCHAIN_SYSROOT}/usr
정리"하기 위해 일부(전부는 아님) 헤더를 복사하여 stdio.h, math.h 및 기타 "중요하지 않은" 헤더를 제거합니다.