Linux下指定so动态库的加载路径的5种方法!!!

您所在的位置:网站首页 linux配置文件查找 Linux下指定so动态库的加载路径的5种方法!!!

Linux下指定so动态库的加载路径的5种方法!!!

2024-01-03 08:57| 来源: 网络整理| 查看: 265

   -Wl,-rpath=linux中真实运行的路径

重点:编译时两个路径 (一个是编译用到的库的路径,另外一个是linux真实运行环境时用到的路径)如何编译?

              不要用绝对路径,编译用到的库的路径比如是/output/mt_ls2k1000/lib/文件夹下的,则可以按照下面(1)的方式加载进来,而真实环境用到的路径则采用(2)的方式加载进来,

            这样编译时$(CC) -o $(PROGRAM) $(filter %.o ,$+) -L$(OUTPUT_LIB_DIR) $(APP1_LIB) ,一个编译时用到的路径和真实运行的路径都加载进来了。

(1)定义链接库,格式: -L[libpath]

       需要理解:-L 是指此文件夹里面的库都默认会查询到。比如有两个库 lib1.so  lib2.so存在/output/mt_ls2k1000/lib里面

 则  OUTPUT_LIB_DIR=/output/mt_ls2k1000/lib

编译时需要  -L$(OUTPUT_LIB_DIR)   就可以找到此文件夹里面的,就可以调用到里面的库lib1.so  lib2.so。

注意:-L后面是库的路径

(2) -lxxx [libxxx.so libxxx.a]

APP1_LIB            := -Wl,--start-group #应用组件库 APP1_LIB            += -ldlt69845datatransfor APP1_LIB            += -lcommonfunc2 APP1_LIB            += -lmtmsg APP1_LIB            += -lpaho-mqtt3c APP1_LIB            += -Wl,--end-group APP1_LIB            += -Wl,-rpath=$(strip /media/dc/mt_tmnl698/lib_zt)

编译时需要 $(APP1_LIB)  就可以找到里面的libdlt69845datatransfor.so、libcommonfunc2.so等等。

注意:-l后面是具体的库

(3)注意:-Wl,-rpath=$(strip /media/dc/mt_tmnl698/lib_zt)    

   -Wl,-rpath=linux中真实运行的路径,这样自己设定路径,是最佳的动态库加载路径的方式。大于下面1 2 4 5四种搜索路径的方式.

其中strip的意思:正常情况下编译出来的共享库和可执行文件中都带有符号信息和调试信息,但是发布版本一般不需要这些信息。且这些信息会导致可执行文件大一倍多,所以可以使用strip命令去掉调试信息:strip liba.so

 

一、库文件的搜索路径:

1、在配置文件/etc/ld.so.conf中指定动态库搜索路径(需要添加其它库文件的路径,在文件的最后添加具体的路径即可 [ 如:/usr/local/lib ],添加后保存退出,然后在命令行ldconfig

假设MySQL数据库函数库在 /usr/lib/mysql中,如何读入高速缓存?

[root@linux ~]# vi /etc/ld.so.conf

include ld.so.conf.d/*.conf

/usr/lib/mysql   



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3