有关环境变量:
LIBRARY_PATH环境变量:指定程序静态链接库文件搜索路径
LD_LIBRARY_PATH环境变量:指定程序动态链接库文件搜索路径
1,Linux静态库与动态库制作
gcc -c hello.c world.c
gcc -shared -o libhello.so hello.o
编译动态库时要用到,比如gcc -shared test.c -o libtest.so
静态库链接时搜索路径顺序:
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
2,gcc编译,ld连接
gcc -c hello.c -o hello.o
ld -o hello hello.o
3,-rpath由于libhello.so依赖于libworld.so,可以只用-rpath或者-rpath-link来指定
先清空LD_LIBRARY_PATH环境变量,然后重新编译test.c并且带上-rpath参数:
export LD_LIBRARY_PATH=
gcc test.c -lhello -L . -Wl , -rpath .
-Wl,-rpath=《your_lib_dir》是为程序添加一个运行时库文件搜索路径的命令,在使用gcc编译链接时添加即可。
-Wl 这个是gcc的参数,表示编译器将后面的参数传递给链接器ld。
-rpath 添加一个文件夹作为运行时库的搜索路径。在将ELF可执行文件与共享对象链接时使用此选项;
4,/etc/ld.so.cache中缓存了动态库路径,可以通过修改配置文件/etc/ld.so.conf中指定的动态库搜索路径,然后执行ldconfig命令来改变
5,-rpath指定的路径会被记录在生成的可执行程序中,用于运行时查找需要加载的动态库。-rpath-link 则只用于链接时查找