Linux下的头文件搜索路径

     对于以压缩包发布的软件,在它的目录下通常都有一个配置脚本configure,它的作用确定编译参数(比如头文件位置、连接库位置等),然后生成Makefile以编译程序。可以进入该软件的目录,执行"./configure --help"命令查看使用帮。

一个程序能正确编译、链接、运行需要满足3个条件:预处理时能找到头文件,连接时能找到库(静态库或动态库),运行时能找到库。下面介绍头文件的搜索路径

GCC 搜索头文件有三种策略:

1.内定搜索目录,这是编译器自身预设的目录。由于是内定的,一定会搜索,所以总是最后才搜索。

2.手动指定搜索目录。可以在执行配置命令configure前,通过环境变量C_INCLUDE_PATH进行设定;也可以在执行配置命令configure时,通过-I选项进行指定。

3.手动指定不进行搜索的目录。这是在执行配置命令时,使用-nostdin选项进行指定。

-nostdinc选项

使编译器不在系统缺省的头文件目录里面找头文件,一般和 -I 联合使用,明确限定头文件的位置。

-nostdin C++选项

规定不在 g++ 指定的标准路经中搜索,但仍在其他路径中搜索。此选项 在创libg++库使用

GCC指定头文件的方式

在程序中,常用两种方法来包含头文件:

#include <headerfile.h> 
#include "headerfile.h"

当#include <headerfile.h> 时,编译时按照"编译命令指定目录--->--->系统预设目录--->编译器预设"的顺序搜索头文件。

当#include "headerfile.h",编译时按照"源文件当前目录---->编译命令指定目录--->系统预设目录--->编译器预设"的顺序搜索头文件。

编译命令指定目录

"指定的"头文件目录是编译程序时使用" -I "选项来指定目录。举个例子:

mkdir -p /work/AAA/include /*临时目录,测试用*/
mkdir -p /work/BBB/include /*临时目录,测试用*/

export C_INCLUDE_PATH=/work/AAA/include

echo ‘main() {}‘ | arm-linux-gcc -I/work/BBB/include -E -v -

得到以下输出内容,从中可以看到查找头文件时的路径及优先顺序:

...
 #include "....." search starts here:
#include <.....> search starts here:

/work/BBB/include
/work/AAA/include

...

系统预设目录

系统预设的头文件目录是通过环境变量C_INCLUDE_PATH来设置的,这个变量的值要在执行配置命令configure之前设置。

编译器预设目录

编译器预设目录由编译器自己决定的,由程序代码决定的,这是不需要工人设置或指定的。

可以总结出头文件的查找路径及优先顺序:

1.如果源文件中使用双引号来包含头文件,则首先在源文件当前目录查找头文件。 
2.如果编译时使用"-I/some/dir",则在/some/dir中查找。

3.如果设置了环境变量C_INCLUDE_PATH,则在指定的目录中查找。

4.最后在编译器预设的路径中查找,这是不需要指定的,编译时一定会在该路径中搜索所需的头文件。

所以,编译程序时如果出现了找不到头文件的错误,可以通过设置C_INCLUDE_PATH或给编译器设置"-I"选线来指定头文件目录,这可以在执行配置命令configure之前设置C_INCLUDE_PATH或CFLAGS,如果不设置CFLAGS,它的默认值为"-g -O2",比如:

export C_INCLUDE_PATH="/some/dir/1:/some/dir/2"

export CFLAGS = "-g -O2 -I/some/dir" #如果设置了C_INCLUDE_PATH,就可以不设置CFLAGS

./configure

还有更好的方法,当明确知道要使用哪个动态库时,可以通过pkg-config命令获知要使用这个库时编译时的参数、连接时的参数。

先执行一下命令体验一下:

export PKG_CONFIG_PATH=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib/pkgconfig

pkg-config --cflags uuid -I/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/include

.头文件搜索路径

gcc 在编译时如何去寻找所需要的头文件 :

-I选项指定的目录--->gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH--->再找编译器内定目录

如果装gcc的时候,是有给定的prefix的话,那么就是

/usr/include

prefix/include

prefix/xxx-xxx-xxx-gnulibc/include

prefix/lib/gcc-lib/xxxx-xxx-xxx-gnulibc/2.8.1/include

时间: 2025-01-14 06:17:41

Linux下的头文件搜索路径的相关文章

Linux C语言头文件搜索路径

本文介绍在linux中头文件的搜索路径,也就是说你通过include指定的头文件,linux下的gcc编译器它是怎么找到它的呢.在此之前,先了解一个基本概念. 头文件是一种文本文件,使用文本编辑器将代码编写好之后,以扩展名.h保存就行了.头文件中一般放一些重复使用的代码,例如函数声明.变量声明.常数定义.宏的定义等等.当使用#include语句将头文件引用时,相当于将头文件中所有内容,复制到#include处.#include有两种写法形式,分别是: #include <> : 直接到系统指定

Linux下的库文件搜索路径

    对于以压缩包发布的软件,在它的目录下通常都有一个配置脚本configure,它的作用确定编译参数(比如头文件位置.连接库位置等),然后生成Makefile以编译程序.可以进入该软件的目录,执行"./configure --help"命令查看使用帮. 一个程序能正确编译.链接.运行需要满足3个条件:预处理时能找到头文件,连接时能找到库(静态库或动态库),运行时能找到库.下面介绍库文件的搜索路径 : 编译的时候: gcc最先搜索-L参数指定的路径--->gcc的环境变量LIB

ios头文件搜索路径教程

路劲分为绝对路径和相对路径 本人建议多使用相对路径,这样工程迁移的时候会省心不少 绝对路径寻找方法:点击工程某个文件,右键“show in finder”打开终端,cd 把文件夹拖入,即可出现一个路劲,这个就是绝对路径 相对路径即相对于当前工程文件的路径,“./”表示当前工程文件夹,后面接得全部是真实文件夹名,工程内部的group无效,"../"表示上层目录 ,在xcode里“$(PROJECT_DIR)”也表示当前工程文件夹目录 需要了解的两个参数意义: non-recursive非

eclipse C开发添加自己的头文件搜索路径

eclipse C开发添加自己的头文件搜索路径 eclipse编译C程序时提示: ..\src\main.c:8:21: fatal error: my_type.h: No such file or directory 如图: 需要添加自己的头文件的路径: 选中工程再右键点击,选择右键菜单的Propertise: C/C++ Build -> Settings -> Tool Settings -> Includes 点击添加的符号,会出现选择头文件的对话框,此时可以选择头文件或头文件

Xcode增加头文件搜索路径的方法

Xcode增加头文件搜索路径的方法 以C++工程为例: 在Build Settings 页面中的Search Paths一节就是用来设置头文件路径. 相关的配置项用红框框起来了,共有三个配置项: Header Search Paths User Header Search Paths Always Search User Paths xcode的头文件路径有两种设置,一种是Header Search Paths,另一种是User Header Search Paths.两者对应两个include

linux下编译时的默认库和头文件搜索路径

链接库路径 默认的链接库路径,定义在搜索/etc/ld.so.conf下的一些路径,其包含了一些重要的系统位置:LIBRARY_PATH, 但如果定义了LD_LIBRARY_PATH, 动态库的搜索路径会先去该环境变量下搜索 但如果定义了LIBRARY_PATH, 静态库的搜索路径会先去该环境变量下搜索 默认的头文件位置 还没找到默认头文件定义的配置文件,与系统,编译器等都有关系,但可以通过以下命令查看 cpp -v /dev/null -o /dev/null 除此之外,可以通过设置C_INC

Linux下设置Core文件生成路径及文件名

修改core dump文件路径: 方法1:临时修改: 修改/proc/sys/kernel/core_pattern文件/proc目录本身动态加载每次系统重启都会重新加载因此种方法只能作临时修改/proc/sys/kernel/core_pattern例:echo '/var/log/%e.core.%p' > /proc/sys/kernel/core_pattern 方法2:永久修改: 使用sysctl -w name=value命令例:/sbin/sysctl -w kernel.core

GCC编译默认的头文件搜索路径

对于c语言来说: gcc -xc -E -v - 截图: 对于c++来说: gcc -xc++ -E -v - 截图: gcc的arg和opt解释: 后面一干啥作用暂时不知道

整理Linux下gcc编译中关于头文件与库文件搜索路径相关问题

分类: MakeFile/Make/GCC/LD2010-11-20 23:15 535人阅读 评论(0) 收藏 举报 转者的话: 本文详细介绍了gcc 编译时 搜索头文件的路径以及方式, 编译时寻找lib库的方式, 以及运行时加载库的寻找方式!!!非常之经典啊!以后有新的知识都汇总到这里来了! 在交叉编译的时候我们需要用到其他的库,在config时候可以通过“-I”来指定头文件目录,但是每次都需要设置的话难免有些麻烦,找到一个简单的方法. 看下文的红色部分. 有大量的环境变量可供设置以影响 G