linux编程头文件所在路径的问题
Posted 上善若水,止于至善
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux编程头文件所在路径的问题相关的知识,希望对你有一定的参考价值。
一、问题引入
1、头文件与库
当我们在PC主机linux环境下(如ubuntu),编写linux应用程序,然后利用gcc来编译。在源代码的开始位置会写入头文件,那是因为我们使用了系统提供的库函数,例如printf、open、read、write等等。我们会写入类似的内容:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> ......
我们的应用程序代码编译过程大概是这样的:编译器根据头文件提供的库函数接口形式,来编译我们的代码(如果不知道调用库函数的形式,eg:参数个数、形式、返回值类型等,将无法对库函数调用的代码进行编译),然后生成目标文件;然后,再使用链接器将这个目标文件与系统库链接;最终生成我们需要的应用程序。所以,其实我们的代码包含了自己写的内容,还有系统为我们提供好的现成的库函数,整个结合起来才形成一个完整的程序。
库函数的头文件,在编译的时候被使用,而库函数的代码段(库文件),在链接的时候被使用。
example:
应用程序代码在使用一个系统调用的时候,例如printf()函数,需要指定包含的头文件stdio.h;另外,在链接的时候对应的链接libc.a(笔者电脑文件所在目录:/usr/lib/i386-linux-gnu/libc.a)。
总结一下,我们编写应用程序,需要使用linux系统提供的库函数。具体实现起来,需要头文件和库文件。头文件是需要我们编写应用程序的时候,在源文件开头添加的;而库文件则需要配置编译环境进行指定搜索目录。
2、头文件和库文件在哪儿?
编写linux本机的应用程序、目标开发板的应用程序以及目标开发板的驱动,都会使用库函数,那么这些情况的头文件和库文件在哪儿放着呢?
不知道这个问题,在编写代码时会有疑惑。比如说,编写目标开发板的应用程序时,使用了open、read、write等函数。于是,想在linux内核开发的源码包(驱动开发环境)里边找到这些函数的完整代码,或者降低要求,查看头文件里的函数声明。结果令人失望,找不到需要的头文件能提供这样的函数声明。这样造成我们不知道该如何使用这些库函数。
事实情况是,上边列出常见的3种编程情况,所使用的头文件和库文件位置都不一样。也就是说,上述3种编程情况,所使用的库函数调用有可能是相同的,但是库函数所在的头文件以及对应的库,所在的位置却不一样。所以,编写目标开发板的应用程序时,在内核开发的源码包(驱动开发环境)中,找不到我们需要的头文件。
下面,根据不同的编程情况,进行说明。
或者利用交叉编译工具arm-linux-gcc
以上是关于linux编程头文件所在路径的问题的主要内容,如果未能解决你的问题,请参考以下文章
VS2017 包含了文件路径却还是找不到头文件(无法打开源文件“***.h”)
VS2017 包含了文件路径却还是找不到头文件(无法打开源文件“***.h”)