0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux应用程序找不到动态库怎么办?

汽车电子技术 来源:嵌入式情报局 作者:情报小哥 2023-02-21 11:02 次阅读

1、静态库与动态库

所谓的库,其实都是一些二进制的可执行文件集合,静态库在linux中一般命名形式为libxxx.a,而动态库一般常用libxxx.so。

他们都可以通过源文件编译得到,往期对这两种库都过介绍:

Linux应用编程之静态库的制作与使用

Linux应用编程之动态库的制作与使用

Linux应用编程之动静态链接库辅助技巧(ldd,-static

对于静态库主要是用于程序编译的过程中提供相应的函数实现,最终使用到该静态库中的内容会整合到最终的程序中,这样程序在运行过程中就不再依赖外部其他库了。

而动态库并不是用于编译期,而是在运行期通过动态加载器来加载库函数,使得可执行程序得以运行,当然动态链接也分不同的加载时期,相对比较灵活,有些程序一运行就需要进行加载,而有些的动态库是在执行过程中加载。

2、动静态库优缺点

那么动态库与静态库的优缺点也比较明显,使用静态库编译生成的可执行文件对外界没有什么需求,依赖少,相应的其可执行程序体积变大,一旦修改需要重新编译。

而对于动态库,由于是程序运行时候加载相应的动态库,所以其可执行文件相对要小很多,同时对于库的修改,仅仅编译和替换相应的动态库即可,更加的方便。

3、Linux中动态库的查找

由于可执行程序依赖动态链接库,所以存在一个问题:从哪里找动态链接库?,经常我们动态编译的可执行应用程序,由于系统中、或者自己没有指定相应的库路径,就会报运行失败,提示缺少相应的库。

图片

这样就需要在系统中安装对应的库,并且把库放在动态加载器所能搜索到的位置,在linux中有如下几种搜索路径:

1、在可执行程序编译的时候通过编译选项指定相应的动态库路径,这样在程序运行的时候就会在文件系统对应路径加载对应的动态库,比如通过使用-Wl,-rpath=your path来进行编译,编译成功的可执行程序你可以使用ldd命令来查看是否路径指定成功,可执行程序几乎是第一时间搜索该路径查看动态库是否存在。

2、通过使用环境变量 : LD_LIBRARY_PATH指定,可以使用如下命令进行查看:

1echo $LD_LIBRARY_PATH

通过export在已有的路径上进行添加:

1export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:your path

跟之前给大家介绍的PATH环境变量的使用是一致的,当可执行程序找到指定路径,会在该环境变量中指定的路径进行查找,当然修改该环境变量会影响到所有的应用程序动态加载的搜索。

3、系统默认的路径/lib和/user/lib进行搜索,当然在用户级的程序大部分都会安装在/usr/local中,所以用户级的库大部分也会放在/user/local/lib路径中。

4、当然在Ubuntu中还通常在配置文件/etc/ld.so.conf中指定的动态库搜索路径,不过要记得当我们把相应的动态库路径添加进入以后,需要使用ldconfig进行配置才能生效。

最 后

好了,这里小哥就简单介绍了动态库与静态库的差异,以及Linux系统一般如何搜索动态库,本系列文章后续还会更新,记得关注学习哦。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11116

    浏览量

    207770
  • 函数
    +关注

    关注

    3

    文章

    4232

    浏览量

    61932
  • 静态库
    +关注

    关注

    0

    文章

    21

    浏览量

    7405
收藏 人收藏

    评论

    相关推荐

    proteus元件找不到怎么办

    `谁有元件啊我这里好多元件都找不到不知道该怎么办`
    发表于 05-20 21:13

    pcb板找不到元件怎么办,求大神呀

    pcb板找不到元件怎么办,求大神呀
    发表于 06-30 23:00

    Altium Designer找不到元件怎么办

    请问一下各位,我在Altium Designer里面绘制电路图时找不到marvell公司的88e1111芯片的元件,不知道该怎么办?网上到处都是比较全的元件,下下来也没见怎么个全法,所以请教一下各位有没有关于Marvell 公
    发表于 07-19 11:34

    找不到TDA2822怎么办

    怎么用MUltisim做有关TDA2822仿真,找不到这个原件怎么办?用其他的怎么替代
    发表于 07-22 15:41

    在***原件找不到所需器件怎么办,新手啊

    在***原件找不到所需器件怎么办
    发表于 10-23 17:46

    AD10工程管理窗口和窗口找不到怎么办

    AD10工程管理窗口和窗口找不到怎么办怎样是AD10恢复默认设
    发表于 01-16 10:41

    orcad仿真中找不到TDA2030怎么办?没有那个

    orcad中找不到TDA2030怎么办?没有那个
    发表于 02-22 20:16

    matlab找不到的问题

    大神们,你们好: 我初学电力电子simulink仿真,找不到connectors这个怎么办,我要T节点。 还有就是,有没有一个供电力电子仿真的专门的下载,像AD里的
    发表于 03-31 18:39

    求助,ChipWatcher找不到信号怎么办

    ChipWatcher找不到信号怎么办
    发表于 08-11 10:01

    电脑找不到硬盘怎么办

    有时候开机时电脑找不到硬盘怎么办,本内容分析了几种找不到硬盘的解决方案。
    发表于 05-08 11:16 6.3w次阅读

    linux找不到动态如何解决

    解决linux找不到动态的问题
    发表于 06-13 09:43 2027次阅读

    找不到服务器或DNS错误时该怎么办

    阳光系统下载 找不到服务器或DNS错误怎么办 我们在使用电脑的时候,经常会浏览网页,但是在浏览网页的过程中经常出现无法显示此网页、找不到服务器或DNS错误,那么我们遇到网页提示找不到
    发表于 02-03 15:07 3955次阅读
    <b class='flag-5'>找不到</b>服务器或DNS错误时该<b class='flag-5'>怎么办</b>

    keil5中找不到或没有对应的芯片怎么办?超详细!!

    keil5中找不到或没有对应的芯片怎么办?超详细!!安装完Keil5之后,有的小伙伴们是不是会发现,为什么新建工程的时候找不到自己想要的CUP型号,如下图:这里就假设要找的CUP型号是三星
    发表于 12-23 19:16 29次下载
    keil5中<b class='flag-5'>找不到</b>或没有对应的芯片<b class='flag-5'>怎么办</b>?超详细!!

    虚拟机里找不到adb设备怎么办

    虚拟机里找不到adb设备
    的头像 发表于 10-13 18:45 1823次阅读

    multisim找不到元件怎么办

    问题以及如何解决它。 Multisim 找不到元件的原因 在使用 Multisim 时,可能会遇到找不到元件的情况。这可能是由于以下原因导致的: 1.1 软件版本问题:不同版本的 Multisim 中可能包含不同的元件。如果您
    的头像 发表于 02-23 15:44 5925次阅读