动态链接库的路径配置-rpath/ld.so.conf/LD_LIBRARY_PATH

Nginx启动报错找不到libcrypto.so.1.1?别慌,5分钟搞定软链接修复 本文详细解析了Nginx启动时遇到的`libcrypto.so.1.1`缺失报错问题,提供了从诊断到解决的完整方案。通过创建软链接、修改环境变量或系统级配置等方法,快速修复动态链接库问题,并分享预防措施和进阶排查技巧,帮助开发者高效解决类似问题。 阅读详情

相关链接:https://blog.youkuaiyun.com/knowledgebao/article/details/84315842


ld.so 搜索库路径的优先级是这样的:

  1.  RPATH ,编译链接时加入 -rpath 参数指明所谓的 RUNPATH ,这样可执行文件(或者依赖其他动态链接库的动态链接库)就能告诉 ld.so 到哪里去搜索对应的动态链接库了。
  2.  LD_LIBRARY_PATH ,对于没有设定 RPATH 的可执行文件或者动态链接库,我们可以用 LD_LIBRARY_PATH 这个环境变量通知 ld.so 往哪里查找链接库。
  3. /etc/ld.so.conf ,/etc/ld.so.conf.d/*.conf 。系统对 ld.so 的路径配置文件。
  4. /usr/lib 、 /lib 和 /usr/local/lib ,系统默认路径。

存放库文件到指定目录,使可执行程序能够找到库文件有三种方法:

第一种,通过ldconfig命令
       ldconfig命令的用途, 主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件. 缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表. 
    这里面涉及到的关键内容有命令:ldconfig,配置文件目录:/etc/ld.so.conf.d,配置文件在/etc/ld.so.conf内容由用户编辑,缓冲文件/etc/ld.so.cache。下面举个例子,比如你在部署软件时,有些动态库安装在exe目录下,可以通过如下方法实现,
1)配置exe.conf文件,里面加一行~/exe,然后将该文件放到/etc/ld.so.conf.d目录下;
2)在/etc/ld.so.conf文件中增加一行include ld.so.conf.d/exe.conf
3)执行 ldconfig命令
之后程序运行时,会自动增加在exe目录中搜索动态库。

第二种,通过LD_LIBRARY_PATH环境变量
        可以通过在.bashrc( Bash ShELL 的配置文件https://blog.youkuaiyun.com/knowledgebao/article/details/84566099)或者.cshrc(C SHELL 的配置文件)中配置该环境变量,LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库. 可以设置多个搜索目录, 这些目录之间用冒号分隔开.

同样是上面的例子,可以通过以上的方法来实现
在.bashrc或.cshrc中增加一行,export LD_LIBRARY_PATH = ~/exe:$LD_LIBRARY_PATH即可。

第三种,通过编译选项-Wl, -rpath指定动态搜索的路径
       -Wl选项告诉编译器将后面的参数传递给链接器。

关于ldconfig和/etc/ld.so.conf的补充:

先上一张图:

/etc/ld.so.conf记录系统默认动态链接库的路径,其中第一句include ld.so.conf.d/*.conf表示/etc/ld.so.conf.d/*.conf下的所有文件都作为/etc/ld.so.conf的内容。也就是说你添加搜索路径的时候,可以直接在/etc/ld.so.conf增加,或者在/etc/ld.so.conf.d目录下增加一个以.conf结尾的文件。

ldconfig程序的目的是使对/etc/ld.so.conf生效。修改完/etc/ld.so.conf需要执行ldconfig命令。ldconfig使所有的库文件都被缓存到ld.so.cache中。实际程序只会从ld.so.cache中寻找依赖库文件。

如果你给系统目录下安装了新的so库,需要执行一遍ldconfig命令,否则即使库存在,由于没加载到ld.so.cache中而无效。通过上面的介绍,对/etc/ld.so.conf.d/的作用就比较清晰了。

关于ldconfig的详细信息参考链接:

 

参考资料:

1,ldconfig命令用法笔记


有任何问题,请联系:knowledgebao@163.com

树莓派4B + 海康工业相机:手把手教你搞定Python-OpenCV环境与动态链接库配置(避坑指南) 本文详细介绍了如何在树莓派4B上配置Python-OpenCV环境并与海康工业相机集成,解决动态链接库配置中的常见问题。通过系统级配置方案和Python实战技巧,帮助开发者快速搭建稳定的机器视觉系统,避免常见的`OSError`错误。 阅读详情

相关推荐

05-rpath解决so动态库依赖1

1. 赖库程动态库或可执件,是何找赖的库的是下录顺来• the RPATH binary header (set at build-time) of the l

linux动态链接库的加载顺序

一、Linux 动态库选择顺序指: 1. 编译程序时用到动态库,该从那些地方查找,按照怎么样的顺序查找? 2. 运行程序时需要动态库,该从那些地方查找,按照怎么样的顺序查找? 二、gcc 编译程序时查找SO顺序如下: 1. gcc 编译时参数-L指定的路径 2. 环境变量 LIBRARY_PATH 3. 系统默认库位置 /lib /usr/lib 三、Linux 程...

深之JohnChen的专栏 9910

matinal:SAP 采购中形成的差异

如果库存足够会影响到物料。

matinal 當冬夜漸暖 。公众号:matinal 820

动态库链接和路径问题总结

动态库链接和路径问题总结

SanShuiGeGe的博客 1262

k8s中如何使用gpu、gpu资源讲解、nvidia gpu驱动安装

gpu资源也是服务器中常见的一种资源,gpu即显卡,一般用在人工智能、图文识别、大模型等领域,其中nvidia gpu是nvidia公司生产的nvidia类型的显卡,amd gpu则是adm公司生产的amd类型gpu。企业中服务器最常见的就是英伟达gpu服务器了。本篇也主要讲解英伟达驱动相关的知识。

MssGuo的博客 1万+

C#实战:如何用Chart控件打造专业级数据可视化报表(附完整代码)

本文详细介绍了如何使用C#的Chart控件创建专业级数据可视化报表,涵盖柱状图、饼图和雷达图等多种图表类型的高级定制与交互增强。通过完整的代码示例,展示了从环境配置到动态数据绑定的全流程,助力开发者提升企业级应用的数据可视化能力。

ipfs8storage的博客 421

Linux 自定义动态链接库目录

往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但是完了之后要调一下ldconfig如果往上面两个目录以外加动态库时候,一定要修改/etc/ld.so.conf,然后再调用ldconfig。如果想在这两个目录以外放lib,但是又不想在/etc/ld.so.conf中加东西(或者是没有权限加东西)。用export一个全局变量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录中找library。这只是一种临时的解决方案,在没有权限或临时需要的时候使用。l。...

JineD的博客 2427

新能源知识库(98)SOC曲线介绍

​:一条异常的健康SOC曲线,往往能提前反映出电池性能的衰退或系统存在的隐患。BMS和EMS通过实时跟踪SOC值,能在电池电量过高(如>95%)时停止充电,电量过低(如<20%)时停止放电,从而避免因过度充放电引发的。​:OCV-SOC曲线上较为平坦的部分(例如,磷酸铁锂电池通常在20%-80% SOC范围)。​:在光伏、储能、电网协同的系统中,SOC曲线是能量调度的核心依据。​:电池的寿命很大程度上取决于它的工作方式。​:利用电池静置后电压与SOC的对应关系来估算,较准确但需要电池静置,无法实时使用。

竹君子之家 924

linux设置动态链接库搜索路径方法及理解 bashrc 和 profile

1、执行 exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:. 最后的 . 表示把当前目录加入到动态链接库查找的目录中去 2、上述方法设置是临时的 另外一种方法: sudo vim /etc/ld.so.conf 添加库路径 如 ./ (表示当前目录) 添加保存后 sudo ldconfig 以下是详细说明及开启shell自动设置的方法,把设置保存在.bashrc文件中: ld.so 动态共享库搜索顺序 1、ELF可执行文件中动态段DT_RPATH指定;gc..

pingis58的博客 4125

C# 工业视觉性能极致优化:多线程推理池 + 对象复用 + 批量检测,速度提升 10 倍实战

set;} // 输入图像set;} // 异步返回结果set;} // 用于监控延迟性能优化不是魔法,而是对资源生命周期的精细管理和对硬件特性的充分利用。多线程池解决了 CPU/GPU 闲置问题。对象池解决了 GC 停顿问题。零拷贝解决了总线带宽瓶颈。严格的 Dispose解决了内存泄漏问题。这套架构已在多个高速锂电、3C 电子检测产线落地,轻松应对 200ms 甚至 50ms 的严苛节拍。记住,在工业领域,稳定性与速度同等重要。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 304

芯片工程师-必须掌握的linux操作-第一讲

一个从材料专业,转行芯片验证初级工程师,自己也是从0基础开始学习入门,更知道0基础的人应该怎么去学习。 现在工作三个多月了,特地花时间给大家写这篇文章。希望能关注、支持下。 为什么芯片验证工程师必须要学习linux命令? 答: ① 芯片工程师主要的职责,就是与IC设计工程师和系统工程师密切合作,开发验证平台,能够根据项目要求产生测试计划,产生代码及功能覆盖率,撰写验证报告。 ②简单点说,主要工作内容,是编写代码去验证设计的对不对。 那么问题来了,编写代码,在什么环境呢,我现在告诉你,都是在linux系统中进

小白蒋-材料转行芯片验证 4842

RPATH 设置动态库的搜索路径

链接动态库 程序如果在链接时使用了动态库,就必须在运行时找到动态库。 Linux 的可执行程序在执行的时候默认是先搜索 /lib 和 /usr/lib 这两个目录,然后按照 /etc/ld.so.conf 里面的配置搜索绝对路径。 同时,Linux也提供了环境变量LD_LIBRARY_PATH供用户选择使用,用户可以通过设定它来查找除默认路径之外的其他路径,如查找 /work/lib 路径,你可以在 /etc/rc.d/rc.local 或其他系统启动后即可执行到的脚本添加如下语句:LD_LIBRARY_P

择一事终一生 2069

软件设计师高频考点—套路题

学习交流的总结

秩沅 2539

c 编译的时候都会去哪些目录寻找动态链接库

c 编译的时候都会去哪些目录寻找动态链接库

xie__jin__cheng的博客 876

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Linux下运行时调用动态链接库.so的三种方法(笔记)

在/etc/ld.so.conf.d/下创建xxx.conf,在文本中加入.so所在路径,如:/usr/xxx等等,然后使用相应ldconfig命令使之生效。 将.so所在路径添加为PATH环境变量。 在编译命令中使用-Wl,-rpath=./参数,并将相应.so拷贝到执行目录;当然也可以将‘./’指定为其他目录。 注意:-L参数添加的lib搜索目录只用于编译时,运行时需使用上述方法之一,否则...

sniperkang的博客 2万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Linux动态链接库顺序,linux中动态链接库的搜索顺序

linux中动态链接库的搜索顺序//// by kirk,2008.11.21,文中有bug请搞紧与我联系:-)//在接手一个很古老的程序时,发现其所使用的动态库都实在是太陈旧了,正式运行环境中部署的库都是相适应的,而目前的开发测试环境中均是部署的新的升级版本。为了能在这些环境下开发测试,程序得能在自定义的路径里来搜索。因此在这里复习一下linux中程序对动态链接库的搜索顺序,如下所述:1.首先...

weixin_40005795的博客 468

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Linux下动态库(so)的搜索路径

程序编译时,通过-Wl, -rpath参数指定的路径; 环境变量LD_LIBRARY_PATH指定的路径 /etc/ld.so.conf或/etc/ld.so.conf.d/目录下任何一个文件中指定的路径 /lib路径 /usr/lib路径 加入动态链接库的路径 su - root echo "/usr/local/lib" >> /etc/ld.so.conf echo "/usr/local/lib64" >> /etc/ld.so.conf ldconfig -v .

hallyz的博客 2366

Linux下so动态库查看与运行时搜索路径的设置--掌握这个就够了

ldd命令 linux 下可以使用ldd查看可执行文件所需要的动态链接库(*.so)。 注:下文用so代替动态链接库文件。 // 举个例子 ~$ ldd /bin/ls linux-vdso.so.1 => (0x00007ffe06386000) libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 ...

SurpassLi的专栏 232

linux动态链接库的编译和使用

其实在/etc/ld.so.conf文件最后的注释写了,/lib, /lib64, /usr/lib, /usr/lib64是系统默认的动态库查询目录,即使环境变量、-Wl,-rpath、/etc/ld.so.conf都不修改,直接把so放到这4个目录里,系统也能自动查找到的。用于在程序运行期间查找动态库的路径,我们可以把libmylib.so放到/usr/local/lib64目录下,并把/usr/local/lib64目录写到。/etc/ld.so.conf文件更改之后,需要执行下。

qq_39854211的博客 1594

将动态库libmodbus.so.5的路径纳入动态链接库

2. 添加库路径到系统配置。# 1. 创建或编辑配置文件。# 2. 更新动态链接器缓存。# 1. 检查库文件是否存在。# 3. 验证是否生效。

haoyj2222的博客 334

linux查找程序的lib,linux库文件头文件查找顺序

Include的header文件,连结数据库,系统定义,总共有下列来源指定gcc去那找。当初在编译时指定的(在~gcc/gcc/collect2.c:locatelib()写在specs内的后来用-D -I -L指定的gcc环境变量设定(编译的时候)ld.so的环境变量(这是run time的时候)一、头文件gcc 在编译时如何去寻找所需要的头文件 :※所以header file的搜寻会从-I开始...

weixin_39850599的博客 386

Linux 添加动态链接库

总结下来首要有3种办法: 1. 更改/etc/ld.so.conf配置文件,然后刷新 vim /etc/ld.so.conf add /where/you/install/lib sudo ldconfig   2.用ln将须要的so文件链接到/usr/lib或者/lib这两个默认的目次下边 ln -s /where/yo

588

Linux动态库搜索路径

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

332

gcc头文件指定及动态链接的使用

gcc头文件指定及动态链接的使用本文详细介绍了linux 下gcc头文件指定方法,以及搜索路径顺序的问题。另外,还总结了,gcc动态链接的方法以及路径指定,同样也讨论了搜索路径的顺序问题。本文包含了很多的例子,具有很强的操作性,希望读者自己去走一遍。一.#include 与#include “”#include 直接到系统指定的某些目录中去找某些头文件。#include “

刘新明的专栏 2536
上一篇: gstreamer依赖编译库
下一篇: GStreamer专栏索引
knowledgebao
博客等级 码龄15年 401粉丝 198原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值