登录 |  注册 |  繁體中文


gcc编译时的搜索路径顺序

分类: 其它 颜色:橙色 默认  字号: 阅读(219) | 评论(0)

1、头文件

C/C++中可以通过#include <stdio.h>和#include "stdio.h"包含头文件,区别是:
#include <stdio.h>,直接到系统指定目录去查找头文件;
#include “stidio.h”,会先到当前工程目录查找头文件,如果没找到再到系统指定目录查找。

gcc编译时查找头文件,按照以下路径顺序查找
1、 搜寻会从-I开始,比如:

gcc -I /usr/local/include/node a.c

2、 然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH
3、 再找系统默认的路径
  /usr/include
  /usr/local/include
  /usr/lib/gcc-lib/i386-linux/2.95.2/include

2、库文件

编译的时候:
1、 gcc会去找-L
2、 再找gcc的环境变量LIBRARY_PATH
3、 再找内定目录
  /lib:
  /usr/lib:
  /usr/local/lib:
这是当初compile gcc时写在程序内的

3、运行时动态库的搜索路径

1、 在编译目标代码时指定该程序的动态库搜索路径,还可以在编译目标代码时指定程序的动态库搜索路径。这是通过gcc 的参数"-Wl,-rpath,"指定。当指定多个动态库搜索路径时,路径之间用冒号":“分隔。
2、 通过环境变量LD_LIBRARY_PATH指定动态库搜索路径(当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号”:"分隔)。
3、 在配置文件/etc/ld.so.conf中指定动态库搜索路径,该文件中每行为一个动态库搜索路径。每次编辑完该文件后,都必须运行命令ldconfig使修改后的配置生效。
4、 默认的动态库搜索路径
  /lib
  /usr/lib
 

附:/lib、 /usr/lib和 /usr/local/lib区别

usr 很多人都认为是user缩写,其实不然,是unix system resource缩写。
/lib是内核级的,
/usr/lib是系统级的,
/usr/local/lib是用户级的。

/lib/ — 包含许多被 /bin/ 和 /sbin/ 中的程序使用的库文件。
目录 /usr/lib/ 中含有更多用于用户程序的库文件。

/usr/bin:几乎所有的系统可执行文件都会安装在这里
/usr/local/bin:则是可以存放一些系统用户自己特定的可执行文件,不用担心会被系统升级之类的行为覆盖,破坏,这个目录不是必须的

 




姓 名: *
邮 箱:
内 容: *
验证码: 点击刷新 *   

回到顶部