linux大多数函数将默认头文件放到/usr/include下,库文件在/usr/lib目录下
而windows使用的库文件大多数放在VS 目录的include和lib下,以及系统文件夹下
如果不在这些目录下就必须链接库文件
例如:我们现在有一个自己的include和lib文件夹分别是 /usr/dev/include和/usr/dev/lib,在lib文件夹下有一个二进制so文件,libmy.so(Linux下的库文件分为两大类分别是动态链接库(通常以.so结尾)和静态链接库(通常以.a结尾),二者的区别仅在于程序执行时所需的代码是在运行时动态加载的,还是在编译时静态加载的)
- 首先我们要进行编译test.c为目标文件
gcc –c –I /usr/dev/include test.c –o test.o - 最后我们把所有目标文件链接成可执行文件
gcc –L /usr/dev/lib –libmy test.o –o test - 使用静态链接库
默认情况下, GCC在链接时优先使用动态链接库,只有当动态链接库不存在时才考虑使用静态链接库,如果需要的话可以在编译时加上-static选项,强制使用静态链接库。
gcc –L /usr/dev/lib –static –libmy test.o –o test - 注:
静态库链接时搜索路径顺序:
1. ld会去找GCC命令中的参数-L
2. 再找gcc的环境变量LIBRARY_PATH
3. 再找内定目录 /lib /usr/lib /usr/local/lib 这是当初compile gcc时写在程序内的
动态链接时、执行时搜索路径顺序:
1. 编译目标代码时指定的动态库搜索路径
2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径
3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径
4. 默认的动态库搜索路径/lib
5. 默认的动态库搜索路径/usr/lib
有关环境变量:
LIBRARY_PATH环境变量:指定程序静态链接库文件搜索路径
LD_LIBRARY_PATH环境变量:指定程序动态链接库文件搜索路径