加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

交叉編譯的Linux的頭文件路徑

2022/12/26
2697
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

我們交叉編譯Linux的時(shí)候可能需要添加新的頭文件,這個(gè)頭文件放在哪里。編譯應(yīng)用程序和內(nèi)核程序不太一樣,分別說。

編譯應(yīng)用程序

編譯器需要找到頭文件有幾種辦法

編譯時(shí)-I指定路徑搜索

arm-linux-gnueabihf-gcc testtty1.c -o testtty1 -I/linux

上述例子中的頭文件存于根目錄下的linux文件中,指定路徑。

設(shè)置環(huán)境變量C_INCLUDE_PATH(不太常用)

C_INCLUDE_PATH=/.....(具體路徑)

export C_INCLUDE_PATH

就和設(shè)置交叉編譯工具鏈方式一樣

默認(rèn)路徑

頭文件分兩種#include <>和#include ""。#include <>使用的是默認(rèn)交叉編譯環(huán)境路徑,#include ""默認(rèn)使用的是當(dāng)前路徑。

可以通過命令搜索

echo 'main(){}'|arm-linux-gnueabihf-gcc -E -v -

其中arm-linux-gnueabihf-gcc取決于你自己使用交叉編譯工具(需要根據(jù)交叉編譯工具進(jìn)行更改),結(jié)果中有以下部分:

#include "..." search starts here:

#include <...> search starts here:

/opt/pkg/petalinux/2018.3/tools/linux-i386/gcc-arm-linux-gnueabi/bin/../lib/gcc/arm-linux-gnueabihf/7.3.1/include

/opt/pkg/petalinux/2018.3/tools/linux-i386/gcc-arm-linux-gnueabi/bin/../lib/gcc/arm-linux-gnueabihf/7.3.1/include-fixed

/opt/pkg/petalinux/2018.3/tools/linux-i386/gcc-arm-linux-gnueabi/bin/../lib/gcc/arm-linux-gnueabihf/7.3.1/../../../../arm-linux-gnueabihf/include

/opt/pkg/petalinux/2018.3/tools/linux-i386/gcc-arm-linux-gnueabi/bin/../arm-linux-gnueabihf/libc/usr/include

這是我的交叉編譯鏈默認(rèn)頭文件位置,如果要使用自己的#include <>文件,將頭文件放入上述位置即可。

編譯內(nèi)核程序

內(nèi)核編譯是在需要內(nèi)核的路徑,所用使用上述默認(rèn)路徑。#include <>使用的是內(nèi)核默認(rèn)路徑。#include ""默認(rèn)使用的是當(dāng)前路徑,當(dāng)前目錄下找不到會(huì)再去內(nèi)核默認(rèn)路徑找的。

這個(gè)默認(rèn)路徑在頂層Makefile中可以看到

# Use USERINCLUDE when you must reference the UAPI directories only.

USERINCLUDE :=

-I$(srctree)/arch/$(hdr-arch)/include/uapi

-I$(objtree)/arch/$(hdr-arch)/include/generated/uapi

-I$(srctree)/include/uapi

-I$(objtree)/include/generated/uapi

-include $(srctree)/include/linux/kconfig.h


# Use LINUXINCLUDE when you must reference the include/ directory.

# Needed to be compatible with the O= option

LINUXINCLUDE :=

-I$(srctree)/arch/$(hdr-arch)/include

-I$(objtree)/arch/$(hdr-arch)/include/generated

$(if $(KBUILD_SRC), -I$(srctree)/include)

-I$(objtree)/include

$(USERINCLUDE)

可以將頭文件放入以上的路徑,或者更改此Makefile增加文件路徑(不建議)。

 

相關(guān)推薦