Cross-Compilation
生成與位置無關的交叉工具鏈
我已經使用 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 中是否有任何選項允許我創建可以移動/複製到其他文件夾/機器的工具鏈?
想通了問題。
我
make headers_install ARCH=arm HDR_INSTALL_PATH=${TOOLCHAIN_SYSROOT}/usr
用來更新工具鏈標題。但是,這會複製一些(不是全部)標頭,${KERNEL_PATH}/include/linux
以${TOOLCHAIN_SYSROOT}/usr
“清理”除複製的標頭之外的任何標頭,從而刪除 stdio.h、math.h 和其他“不重要”的標頭。