1 应用编程、驱动源代码中的头文件
1.1 应用编程中包含的头文件是应用层的头文件,是应用程序的编译器带来的
1.1.1 编译windows下的应用程序时
1)使用<>包含的头文件一般会先搜索-I选项后的路径(即用gcc编译时的-I选项),之后就是标准的系统头文件路径。
2)而用""号包含的头文件会首先搜索当前的工作目录,之后的搜索路径才是和<>号包含的头文件所搜索的路径一样的路径。
3)在linux系统中编译X86架构的程序时,一般默认标准的头文件路径为:
如下是我在ubuntu下linux中,使用cpp -v,得到的默认头文件路径
/usr/lib/gcc/x86_64-linux-gnu/5/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
1.1.2 编译ARM架构的应用程序时
1 ) 在linux系统中编译ARM 架构的程序时,一般默认标准的头文件路径为:
如下是我在ubuntu下linux中,使用arm-hisiv300-linux-cpp -v,得到路径
/opt/hisi-linux/x86-arm/arm-hisiv300-linux/bin/../lib/gcc/arm-hisiv300-linux-uclibcgnueabi/4.8.3/include
/opt/hisi-linux/x86-arm/arm-hisiv300-linux/bin/../target/usr/include
2) 通过在makefile中使用-I等方式指定
见libjpeg库的移植
3)比如在海思平台上,需要用交叉编译工具编译能在海思开发板上使用的应用程序,如下:
#include <sys/stat.h>
#include <sys/time.h>
#include <fcntl.h>
#include <errno.h>
Linux命令行下使用find -name "stat.h" (注意:在最顶层的目录使用root用户权限搜索)
./opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/usr/include/sys/stat.h
总结:不同版本的编译工具链,是对应自己的平台编写的,比如工具链里的一个可执行程序gcc,arm-hisiv300-linux、arm-x210-linux-gcc,安装工具链的时候,里面就有所有的编译时需要的头文件,编译时默认查找头文件的路径在你安装的地方,如上所述,所有我们在makefile里面要修改CC = arm-xxx-xxx等等,make的时候,才会使用我们指定的交叉编译工具链。
1.2 编写驱动代码时的头文件
(1)驱动源码属于内核源码的一部分,驱动源码中的头文件其实就是内核源代码目录下的include目录下的头文件。当我们#include时,自动会搜索到include下
(2)比如驱动程序,那么所包含的头文件是在内核源码的安装目录下,即/usr/src/kernel/include,这时一般要在Makefile文件中指定内核源码目录,在编译时指定INCLUDE目录,看你自己解压后安装的目录