GCC对头文件和库文件的搜索路径
1 搜索头文件
头文件的搜索顺序是:
- 从-I开始
- 然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH
- 再找内定目录/usr/include /usr/local/include /usr/lib/gcc-lib/i386-linux/2.95.2/include /usr/lib/gcc-lib/i386-linux/2.95.2/……/……/……/……/include/g++-3 /usr/lib/gcc-lib/i386-linux/2.95.2/……/……/……/……/i386-linux/include库文件
但是如果装gcc的时候,是有给定的prefix的话,那么就是
- /usr/include
- prefix/include
- prefix/xxx-xxx-xxx-gnulibc/include
- prefix/lib/gcc-lib/xxxx-xxx-xxx-gnulibc/2.8.1/include
2 搜索静态库
- ld会去找GCC命令行中的参数-L的目录中是否有该静态库;
- 再去找GCC的环境变量LIBRARY_PATH
- 再找内定目录/lib、/usr/lib、/usr/local/lib夏是否有该链接库,这是当初compile gcc的时候确定的
3 运行时搜索动态库
动态库链接时、执行时搜索路径顺序
- 编译目标代码时指定的动态库搜索路径;
- 环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
- 配置文件/etc/ld.so.conf中指定的动态库搜索路径;
- 默认的动态搜索路径/lib;
- 默认的动态库搜索路径/usr/lib
大家可以看到/etc/ld.so.conf这个配置文件中制定了动态库搜索路径,如下图所示,主要包含了/etc/ld.so.conf.d/路径下的配置文件,
那么我们看ld.so.conf.d/下的配置文件有哪些呢?如下图所示
而每个conf也只是包含了动态库文件所在的路径,所以如果自己编译到的so文件需要自行调用的时候,当然可以把它的路径加到conf文件中,但是一般推荐直接放在/usr/lib下或者创建超链接,这样就不用每次部署或者每个人在自己的本地开发的时候修改conf。
小小菜鸟一枚


浙公网安备 33010602011771号