参考文章
gcc编译时的搜索路径顺序zz
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
动态库搜索的详细例子,可以参考这篇文章
gcc如何指定编译头文件的位置
附:/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:则是可以存放一些系统用户自己特定的可执行文件,不用担心会被系统升级之类的行为覆盖,破坏,这个目录不是必须的