Cross-Compilation

生成與位置無關的交叉工具鏈

  • November 10, 2016

我已經使用 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 和其他“不重要”的標頭。

引用自:https://unix.stackexchange.com/questions/321693