Linux 下头文件包含,静态链接,动态链接等默认搜索的系统路径。
1. 头文件路径
#include <>直接到系统指定的某些目录中去找某些头文件。
#include “”先到源文件所在文件夹去找,然后再到系统指定的某些目录中去找某些头文件。
那么gcc如何确定头文件搜索路径呢?
默认路径/usr/include
命令行指定gcc -I xxxx
文件路径有多种,那么先后顺序如何?
1. -I 指定的路径
2. gcc 环境变量指定的路径C_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJC_INCLUDE_PATH
3. 上述指定目录/usr/include
2.动态链接时、执行时搜索路径顺序:
1.编译目标代码时指定的动态库搜索路径;
2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
3.配置文件/etc/ld.so.conf中指定的动态库搜索路径;
4.默认的动态库搜索路径/lib;
5.默认的动态库搜索路径/usr/lib。
注意,在使用动态库时,有一个匹配规则,比如:-lpthread ,其实对应的是libpthread.so,所以-l默认会把前面的lib替换掉,直接写-lpthread就可以了
3.静态库链接时搜索路径顺序:
1.ld会去找GCC命令中的参数-L
2.再找gcc的环境变量LIBRARY_PATH
3.再找内定目录 /lib /usr/lib /usr/local/lib 这是当初compile gcc时写在程序内的
4.执行过程
无论是使用动态库还是外部库链接时都是使用的ld连接器;
使用动态库的程序执行时使用动态加载器。在Linux 下,加载器是/lib/ld-Linux.so.X(X是版本号)。然后加载器搜索、加载程序所要使用的动态链接库。搜索顺序见上。