众所周知,Linux 动态库的默认搜索路径是 / lib 和 / usr/lib。动态库被创建后,一般都复制到这两个目录中。当程序执行时需要某动态库,并且该动 态库还未加载到内存中,则系统会自动到这两个默认搜索路径中去查找相应的动态库文件,然后加载该文件到内存中,这样程序就可以使用该动态库中的函数,以及该动态库的其它资源了。在 Linux 中,动态库的搜索路径除了默认的搜索路径外,还可以通过以下三种方法来指定:
- 方法一:在配置文件 / etc/ld.so.conf 中指定动态库搜索路径;
- 方法二:通过环境变量 LD_LIBRARY_PATH 指定动态库搜索路径;
- 方法三:在编译目标代码时指定该程序的动态库搜索路径。
通过 gcc 参数指定
通过 gcc 参数制定之后就不需要配置环境变量和配置文件了。
gcc -lm -L /usr/lib/mylibs -lcrypto -Wl,-rpath,/usr/lib/mylibs sslvpn_api.c cJSON.c daemon.c -odaemon
说明:-L 指定链接时库路径;-Wl,-rpath,指定运行时库路径
通过设置环境变量
注意:只对当前shell有效,关闭shell或者退出当前用户则环境变量配置及无效了。
export LD_LIBRARY_PATH=./lib
通过配置文件(永久)
#修改/etc/ld.so.conf文件。其文件内容为:
[root@VM_24_16_centos etc]# cat /etc/ld.so.conf
include ld.so.conf.d
运行库目录搜索顺序
1.编译目标代码时指定的动态库搜索路径;
2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
3.配置文件/etc/ld.so.conf中指定的动态库搜索路径;
4.默认的动态库搜索路径/lib;
5.默认的动态库搜索路径/usr/lib。