一.头文件
1.1 gcc或g++找头文件有三种策略
1. 首先根据编译时-I指定路径搜索:
gcc test.c -I/tools/libevent/include -I../
2. 然后找gcc的环境变量:
C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH
#gcc找到头文件的路径
C_INCLUDE_PATH=/usr/include/libxml2:/MyLibPath
export C_INCLUDE_PATH
#g++找到头文件的路径
CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/include/libxml2:/MyLibPath
export CPLUS_INCLUDE_PATH
linux添加头文件路径:
对所有用户有效在/etc/profile增加上面内容。
如果只对当前用户有效在Home目录下的.bashrc或.bash_profile里增加上面的内容。
3. 最后找系统默认路径下的目录:
/usr/include
/usr/local/include //通常自己添加的头文件如.h或.hpp文件放在该路径下
/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.1 编译时查找库文件路径
1. 首先gcc会去找-L:
gcc test.c -L/tools/libevent/lib -L../
2. 然后再找gcc的环境变量LIBRARY_PATH:
动态链接库的路径:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/MyLib
export LD_LIBRARY_PATH静态库的路径:
LIBRARY_PATH=$LIBRARY_PATH:/MyLib
export LIBRARY_PATH
linux添加库文件路径:
对所有用户有效在/etc/profile增加上面内容。
如果只对当前用户有效在Home目录下的.bashrc或.bash_profile里增加上面的内容。
设置库文件路径后: gcc demo.c -o demo -levent 就可以了,而不需要-L指定库文件路径。
3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径:
echo "/usr/local/lib" >> /etc/ld.so.conf
将/usr/local/lib添加到/etc/ld.so.conf动态库搜索文件中。
4. 最后再找系统目录:
/lib
/usr/lib
/usr/local/lib //通常自己添加的库文件如.a或.so文件放在该路径下
2.2 运行时查找动态库文件路径
方法一:在配置文件/etc/ld.so.conf中指定动态库搜索路径
方法二:通过环境变量LD_LIBRARY_PATH指定动态库搜索路径(当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号":“分隔)
方法三:配置文件/etc/ld.so.conf
中指定的动态库搜索路径;
方法四:在编译目标代码时指定该程序的动态库搜索路径(还可以在编译目标代码时指定程序的动态库搜索路径。这是通过gcc 的参数”-Wl,-rpath,“指定(如)。当指定多个动态库搜索路径时,路径之间用冒号”:"分隔)
方法五:默认的动态库搜索路径:/lib /usr/lib /usr/local/lib
2.3 动态库的搜索路径搜索的先后顺序
1.编译目标代码时-L参数指定的动态库搜索路径;
2.环境变量LD_LIBRARY_PATH
指定的动态库搜索路径;
3.配置文件/etc/ld.so.conf
中指定的动态库搜索路径;
4.默认的动态库搜索路径/lib /usr/lib /usr/local/lib;