本文共 1744 字,大约阅读时间需要 5 分钟。
1.头文件搜索顺序:
- ①先搜索当前目录 ②然后搜索-I指定的目录 ③再搜索gcc的环境变量CPLUS_INCLUDE_PATH(C程序使用的是C_INCLUDE_PATH) ④最后搜索gcc的内定目录 /usr/include /usr/local/include /usr/lib/gcc/x86_64-redhat-Linux/4.1.1/include
2.库文件搜索顺序:
- 编译的时候: ①gcc会去找-L ②再找gcc的环境变量LIBRARY_PATH ③再找内定目录 /lib /usr/lib /usr/local/lib 运行时动态库的搜索路径: 动态库的搜索路径搜索的先后顺序是: ①编译目标代码时指定的动态库搜索路径(这是通过gcc 的参数"-Wl,-rpath,“指定。当指定多个动态库搜索路径时,路径之间用冒号”:“分隔) ②环境变量LD_LIBRARY_PATH指定的动态库搜索路径(当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号”:"分隔) ③配置文件/etc/ld.so.conf中指定的动态库搜索路径; ④默认的动态库搜索路径/lib; ⑤默认的动态库搜索路径/usr/lib。 (应注意动态库搜寻路径并不包括当前文件夹,所以当即使可执行文件和其所需的so文件在同一文件夹,也会出现找不到so的问题,类同#include <header_file>不搜索当前目录) C/C++程序在linux下被编译和连接时,GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径。自己指定的路径就不说了,这里说明一下系统自动搜索的路径。
3. include路径添加:
- 除了默认的/usr/include, /usr/local/include等include路径外,还可以通过设置环境变量来添加系统include的路径:
C
- export C_INCLUDE_PATH=XXXX:$C_INCLUDE_PATH
CPP
- export CPLUS_INCLUDE_PATH=XXX:$CPLUS_INCLUDE_PATH 以上修改可以直接命令行输入(一次性),可以在/etc/profile中完成(对所有用户生效),也可以在用户home目录下的.bashrc或.bash_profile中添加(针对某个用户生效),修改完后重新登录即生效。
4. Link链接库文件路径:
- 链接库文件在连接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的(也可以在编译命令中通过 -l -L 来指定,这里讲的是使用系统默认搜索路径)。 一般 Linux 系统把 /lib /usr/lib /usr/local/lib 作为默认的库搜索路径,所以使用这几个目录中的链接库文件可直接被搜索到(不需要专门指定链接库路径)。对于默认搜索路径之外的库,则需要将其所在路径添加到gcc/g++的搜索路径之中。 链接库文件的搜索路径指定有两种方式:1)修改/etc/so.ld.conf 2)修改环境变量,在其中添加自己的路径
1) 修改环境变量
2) 修改/etc/so.ld.conf
- 在/etc/ld.so.conf 中添加指定的链接库搜索路径(需要root权限),然后运行 /sbin/ldconfig,以达到刷新 /etc/ld.so.cache的效果,这一步很重要。
- LD_LIBRARY_PATH和LIBRARY_PATH区别,LD_LIBRARY_PATH用于运行时动态库的查询路径,而LIBRARY_PATH是用于编译时的查找路径。一个是运行时,一个是编译时。
原文
转载地址:http://mdzvi.baihongyu.com/