ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

软件运行和编译过程及库调用机制(以及删除库的恢复方法)

2022-02-04 22:02:26  阅读:252  来源: 互联网

标签:调用 so.1 hostname 及库 编译 so.2 ls linux lib64


1.ldd是个外部命令

[root@centos7 ~]# type ldd
ldd is /usr/bin/ldd

 

 

2.ldd:是用来打印共享对象(库)依赖关系

 

 

3.1)来查查ls调用的二进制库有哪些

[root@centos7 ~]# which ls
alias ls='ls --color=auto'
        /usr/bin/ls
[root@centos7 ~]# ldd /usr/bin/ls
        linux-vdso.so.1 =>  (0x00007ffffa79e000)
        libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fb9680ab000)
        libcap.so.2 => /lib64/libcap.so.2 (0x00007fb967ea6000)
        libacl.so.1 => /lib64/libacl.so.1 (0x00007fb967c9d000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fb9678cf000)
        libpcre.so.1 => /lib64/libpcre.so.1 (0x00007fb96766d000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fb967469000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fb9682d2000)
        libattr.so.1 => /lib64/libattr.so.1 (0x00007fb967264000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fb967048000)

2)再查查hostname

[root@centos7 ~]# type hostname
hostname is /usr/bin/hostname
[root@centos7 ~]# ldd /usr/bin/hostname
        linux-vdso.so.1 =>  (0x00007ffc605fd000)
        libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f9bd182a000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f9bd145c000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f9bd1a44000)

 

 

 

4.我们假如把ls或者hostname的某一个库移走:

[root@centos7 ~]# mv /lib64/ld-linux-x86-64.so.2 /opt

再来运行ls和hostname等

[root@centos7 ~]# ls
-bash: /usr/bin/ls: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory
[root@centos7 ~]# hostname
-bash: /usr/bin/hostname: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

发现ls和hostname均不能运行,你破坏影响的范围是:谁依赖调用这个库全部影响。所以库的重要性,甚至会比这个程序还重要.

 

 

5.那我们尝试把这个库再移回去:

[root@centos7 ~]# mv /opt/ld-linux-x86-64.so.2 /lib64
-bash: /usr/bin/mv: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

发现,也移不回去了,因为mv也依赖他

 

 

6.除了重启和快照恢复,我们还可以这样

1)第一步在开机的时候,按ctrl+alt+insert,进度条出现的时候再按esc进入

 

 2)选3,进入到这个界面选第三个:

 

 3)然后进入下图界面选第二个:

 

 4)选择第一个继续输入1:

 

 5)按c继续

 

 6)这里的return键就是enter,敲enter继续

 

 7)然后我们就进入到了这个界面这个就是救援版的或者光盘版的小linux:

 

 8)注意你现在看到的根不是你原来目录的根,原来的硬盘的根已经放在/mnt/sysroot下去了,这个根是救援光盘加载的虚拟根,但是我这个却是在/mnt/sysimage中,可能版本不一样,但是不影响

 

 9)你在救援光盘的Linux中你用ls可以查看你移动在/opt下的库文件

 

 10)现在就很明朗了,用mv再将其移动过去就可以了,有人会问刚才为什么不能移动回去,因为你现在用的是救援光盘版的小Linux,不是硬盘的Linux,救援光盘的Linux当然没问题了,所以我们可以正常敲命令。这里因为我考虑到万一库被删的情况,就没用mv,懒得再弄一遍了哈哈,不过弄好效果如下图.

 

 

 

 

7.万一我们将上述库给删了怎么办

1)按照6的步骤最后一步不用mv,用cp将救援光盘的/lib64/ld-linux-x86-64.so.2复制到你的硬盘Linux中:

 

 2)在其页面按ctrl+alt+insert重启,效果如下图:

 

 可以发现已经正常了.

 

 

2022-2-4 21:37

标签:调用,so.1,hostname,及库,编译,so.2,ls,linux,lib64
来源: https://www.cnblogs.com/weilanxuesre/p/15863482.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有