今天遇到了交叉編譯找不到頭文件的問題,解決方法如下:
-
首先,已知include <>的會在安裝編譯器時指定的路徑下去尋找該頭文件,include ""則會在源文件所在路徑尋找。但由於頭文件之間調用關系復雜,僅僅復制stdio.h到當前路徑並且將<>換為include “”解決不了問題
- 最后解決方法是將/usr/include/下的所有頭文件都復制到了編譯器尋找頭文件的路徑下
echo 'main(){}' | arm-poky-linux-gnueabi-gcc -E -v - //注意,結尾就是一個-,並不是缺失了元素
- 首先使用上述命令,獲取交叉編譯器搜索頭文件的默認路徑(下方只是節選,請自行找到該段):
#include <...> search starts here: /opt/fsl-imx-x11/4.1.15-2.0.1/sysroots/x86_64-pokysdk-linux/usr/lib/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/5.3.0/include /opt/fsl-imx-x11/4.1.15-2.0.1/sysroots/x86_64-pokysdk-linux/usr/lib/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/5.3.0/include-fixed End of search list.
- 接下來就是cp /usr/include/. /opt/fsl-......省略 -r,就ok了
- 補充:官方頭文件的搜索順序為:通過GCC參數-I指定的目錄;通過環境變量C_INCLUDE_PATH指定的目錄;編譯器的默認目錄。搜索規則是,當不同目錄下存在相同的頭文件時,先搜到哪個就使用哪個