众所周知,Linux 动态库的默认搜索路径是 / lib 和 / usr/lib。动态库被创建后,一般都复制到这两个目录中。当程序执行时需要某动态库,并且该动 态库还未加载到内存中,则系统会自动到这两个默认搜索路径中去查找相应的动态库文件,然后加载该文件到内存中,这样程序就可以使用该动态库中的函数,以及该动态库的其它资源了。在 Linux 中,动态库的搜索路径除了默认的搜索路径外,还可以通过以下三种方法来指定:

  • 方法一:在配置文件 / etc/ld.so.conf 中指定动态库搜索路径;
  • 方法二:通过环境变量 LD_LIBRARY_PATH 指定动态库搜索路径;
  • 方法三:在编译目标代码时指定该程序的动态库搜索路径。

通过 gcc 参数指定

通过 gcc 参数制定之后就不需要配置环境变量和配置文件了。

  1. 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或者退出当前用户则环境变量配置及无效了。

  1. export LD_LIBRARY_PATH=./lib

通过配置文件(永久)

  1. #修改/etc/ld.so.conf文件。其文件内容为:
  2. [root@VM_24_16_centos etc]# cat /etc/ld.so.conf
  3. include ld.so.conf.d

运行库目录搜索顺序

1.编译目标代码时指定的动态库搜索路径;
2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
3.配置文件/etc/ld.so.conf中指定的动态库搜索路径;
4.默认的动态库搜索路径/lib;
5.默认的动态库搜索路径/usr/lib。

在上述1、2、3指定动态库搜索路径时,都可指定多个动态库搜索路径,其搜索的先后顺序是按指定路径的先后顺序搜索的。