ldd 和ldconfig

ldd 和ldconfig一、ldconfigldconfig是一个动态链接库管理命令,为了让动态链接库为系统所共享,还需运行动态链接库的管理命令–ldconfig。ldconfig命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连

大家好,又见面了,我是你们的朋友全栈君。

一、ldconfig

ldconfig是一个动态链接库管理命令,为了让动态链接库为系统所共享,还需运行动态链接库的管理命令–ldconfig。 ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.


Linux下的共享库机制采用了类似于高速缓存的机制,将库信息保存在/etc/ld.so.cache里边。

程序连接的时候首先从这个文件里边查找,然后再到ld.so.conf的路径里边去详细找。

这就是为什么修改了ld.so.conf要重新运行一下ldconfig的原因

补充一点,ldconfig在/sbin里面。


ldconfig几个需要注意的地方
1. 往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但是完了之后要调一下ldconfig,不然这个library会找不到
2. 想往上面两个目录以外加东西的时候,一定要修改/etc/ld.so.conf,然后再调用ldconfig,不然也会找不到
比如安装了一个MySQL到/usr/local/mysql,mysql有一大堆library在/usr/local/mysql/lib下面,这时就需要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib,保存过后ldconfig一下,新的library才能在程序运行时被找到。
3. 如果想在这两个目录以外放lib,但是又不想在/etc/ld.so.conf中加东西(或者是没有权限加东西)。那也可以,就是export一个全局变量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录中找library。一般来讲这只是一种临时的解决方案,在没有权限或临时需要的时候使用。
4. ldconfig做的这些东西都与运行程序时有关,跟编译时一点关系都没有。编译的时候还是该加-L就得加,不要混淆了。
5. 总之,就是不管做了什么关于library的变动后,最好都ldconfig一下,不然会出现一些意想不到的结果。不会花太多的时间,但是会省很多的事。


二、ldd

作用:用来查看程序运行所需的共享库,常用来解决程序因缺少某个库文件而不能运行的一些问题。
ldd命令原理(摘自网络)
1、首先ldd不是一个可执行程序,而只是一个shell脚本
2、ldd能够显示可执行模块的dependency,其原理是通过设置一系列的环境变量,如下:LD_TRACE_LOADED_OBJECTS、
LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、LD_VERBOSE等。当
LD_TRACE_LOADED_OBJECTS环境变量不为空时,任何可执行程序在运行时,它都会只显示模块的dependency,而程序并不真正执行。要不你可以在shell终端测试一下,如下:
(1) export LD_TRACE_LOADED_OBJECTS=1
(2) 再执行任何的程序,如ls等,看看程序的运行结果
3、ldd显示可执行模块的dependency的工作原理,其实质是通过ld-linux.so(elf动态库的装载器)来实现的。我们知道,ld-
linux.so模块会先于executable模块程序工作,并获得控制权,因此当上述的那些环境变量被设置时,ld-linux.so选择了显示可执
行模块的dependency。
4、实际上可以直接执行ld-linux.so模块,如:/lib/ld-linux.so.2 –list program(这相当于ldd program)

1

0
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/132271.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 哥哥[通俗易懂]

    哥哥[通俗易懂]哥哥

  • 记一次压测问题定位:connection reset by peer,TCP三次握手后服务端发送RST

    记一次压测问题定位:connection reset by peer,TCP三次握手后服务端发送RST问题描述这两天用Go做一个比较简单的task:后端有HTTPServer和TCPServer。客户端通过http接入到HTTPServer,HTTPServer通过RPC将请求发送到TCPServer,所有的业务逻辑都由TCPServer处理。压测:自己的mac电脑(CPU:Inteli7,4核,2.7GHz。内存:16G),硬件够用。客户端用Go编写,1个goruntine启…

  • Ifconfig_5k是多少啊

    Ifconfig_5k是多少啊文章目录Linux_day06-07Linux的网络相关一.设置主机名二.chkconfig服务配置三.ntp服务四.防火墙服务——软件防火墙五.网络相关的一些命令1. **ifconfig**2. **netstat**3. **ping**4. **telnet**——用于测试端口连通性5. **curl**——资源定位Linux_day06-07Linux的网络相关一.设置主机名临时设置:#hostname 新主机名(切换用户生效,重启还原)永久设置:修改配置文件/etc/hostname

  • ntp服务器ntp协议时间戳,计算机的时钟(一):NTP 协议[通俗易懂]

    ntp服务器ntp协议时间戳,计算机的时钟(一):NTP 协议[通俗易懂]本系列文章主要介绍计算机系统中时钟的处理。主要内容包含NTP,Lamport逻辑时钟,向量时钟,TrueTime等。本文是第一篇,介绍NTP协议。电脑的时钟不知道你注意过没有,假如隔了好几天打开你的电脑,任务栏的时间依然是显示正确的,即使你的电脑没有联网,这是如何做到的?post-quartz.png计算机的主板上有一个石英晶体振荡器和一个纽扣电池。石英晶体振荡器的频率是32768Hz每秒。在通电…

    2022年10月12日
  • centos7配置sftp_怎么修改服务器sftp端口

    centos7配置sftp_怎么修改服务器sftp端口CentOS7修改sftp端口修改sftp默认端口为12322vi/etc/ssh/ssh_config把Port22改成Port12322vi/etc/ssh/sshd_config把Port22改成Port12322修改之后重启servicesshdrestart

  • eclipse中各种代码的注释快捷键

    eclipse中各种代码的注释快捷键Java文件:注释和取消注释的快捷键都是:CTRL+/或Shift+Ctrl+CJS文件:注释和取消注释的快捷键都是:CTRL+/或Shift+Ctrl+Cxml文件:注释:选中要注销的代码CTRL+SHIFT+/或选中代码按Shift+Ctrl+C取消注释:CTRL+SHIFT+\或Shift+Ctrl+Cjsp文件:ht…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号