linux 添加动态链接库的方法

程序在 linux 下默认在/lib和/usr/lib目录下查找库,也可以通过ln建立软连接

        库文件在连接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的。一般 Linux 系统把 /lib 和 /usr/lib 两个目录作为默认的库搜索路径,所以使用这两个目录中的库时不需要进行设置搜索路径即可直接使用。对于处于默认库搜索路径之外的库,需要将库的位置添加到库的搜索路径之中。设置库文件的搜索路径有下列两种方式,可任选其一使用:

1、在 /etc/ld.so.conf 文件中添加库的搜索路径。(或在/etc/ld.so.conf.d 下新建一个.conf文件,将搜索路径一行一个加入-junziyang)

        将存放库文件的路径都加入到/etc /ld.so.conf中是明智的选择添加方法也极其简单,将库文件的绝对路径直接写进去

/usr/local/lib
/opt/MVS/lib

2、在环境变量 LD_LIBRARY_PATH 中指明库的搜索路径

export  LD_LIBRARY_PATH= /opt/MVS/lib :$LD_LIBRARY_PATH

交叉编译时候如何配置连接库的搜索路径

交叉编译的时候不能使用本地(i686机器,即PC机器,研发机器)机器上的库,但是在做编译链接的时候默认的是使用本地库,即/usr/lib, /lib两个目录。因此,在交叉编译的时候,要采取一些方法使得在编译链接的时候找到需要的库。

1、交叉编译时候直接使用-L和-I参数指定搜索非标准的库文档和头文档的路径。例如:

arm-linux-gcc  test.c  -L /usr/local/arm/lib  -I /usr/local/include

2、使用ld.so.conf文档,将用到的库所在文档目录添加到此文档中,然后使用ldconfig命令刷新缓存

或者用

export  LD_LIBRARY_PATH=$LD_LIBRARY_PATH: /usr/local/arm/lib

 linux下关于动态库的知识

1. 静态库和动态库的基本概念

        静态库,是在可执行程序连接时就已经加入到执行码中,在物理上成为执行程序的一部分;使用静态库编译的程序运行时无需该库文件支持,哪里都可以用,但是生成的可执行文件较大。

        动态库,是在可执行程序启动时加载到执行程序中,可以被多个可执行程序共享使用。使用动态库编译生成的程序相对较小,但运行时需要库文件支持,如果机器里没有这些库文件就不能运行。

2. 如何使用动态库

        如何程序在连接时使用了共享库,就必须在运行的时候能够找到共享库的位置。linux的可执行程序在执行的时候默认是先搜索/lib和/usr/lib这两个目录,然后按照/etc/ld.so.conf里面的配置搜索绝对路径。

        同时,Linux也提供了环境变量LD_LIBRARY_PATH供用户选择使用,用户可以通过设定它来查找除默认路径之外的其他路径,如查找/work/lib路径,你可以在/etc/rc.d/rc.local或其他系统启动后即可执行到的脚本添加如下语句:LD_LIBRARY_PATH =/work/lib:$(LD_LIBRARY_PATH)。并且LD_LIBRARY_PATH路径优先于系统默认路径之前查找。

        不过LD_LIBRARY_PATH的设定作用是全局的,过多的使用可能会影响到其他应用程序的运行,所以多用在调试。通常情况下推荐还是使用gcc的-R或-rpath选项来在编译时就指定库的查找路径,并且该库的路径信息保存在可执行文件中,运行时它会直接到该路径查找库,避免了使用LD_LIBRARY_PATH环境变量查找。

3.库的链接时路径和运行时路径

        现代链接器在处理动态库时将链接时路径(Link-time path)和运行时路径(Run-time path)分开,用户可以通过-L指定连接时库的路径,通过-R(或-rpath)指定程序运行时库的路径,大大提高了库应用的灵活性。比如我们做嵌入式移植时:

arm-linux-gcc $(CFLAGS) –o target –L /work/lib/zlib/ -llibz

(work/lib/zlib下是交叉编译好的zlib库),将target编译好后我们只要把zlib库拷贝到开发板的系统默认路径下即可。或者通过- rpath(或-R )、LD_LIBRARY_PATH指定查找路径。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Linux中,生成动态链接库的步骤如下:首先,使用gcc命令编译生成地址无关代码,可使用选项-fpic来指定编译生成地址无关代码。其次,使用选项-shared来生成动态链接库文件。例如,可以使用以下命令生成动态链接库文件libfun.so:gcc -fpic -shared fun.c -o libfun.so。 生成动态链接库之后,需要将生成的动态链接库文件复制到系统默认的动态链接库搜索路径下。通常,系统默认的动态链接库搜索路径包括/lib、/usr/lib和/usr/local/lib等目录。可以将动态链接库文件放置在任何一个这些目录下。这样,系统在运行程序时就可以正确地找到动态链接库。 如果程序在运行时无法找到动态链接库,可以采取以下几种解决方法之一:将动态链接库的目录加入程序的搜索路径中。可以将动态链接库的路径添加到环境变量LD_LIBRARY_PATH中,以实现动态链接库的搜索。例如,可以使用以下命令将库的路径添加到LD_LIBRARY_PATH环境变量中:export LD_LIBRARY_PATH=/path/to/library。这样,程序在运行时就能找到所需的动态链接库。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Linux制作动态链接库](https://blog.csdn.net/Oscer2016/article/details/52048957)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洲洲不是州州

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值