今天启动GDB遇到了这个问题,查了各种原因,更换了库,仍然无法解决。
查到加入一条环境变量的方法,解决了。
export LD_LIBRARY_PATH=/usr/lib64:$LD_LIBRARY_PATH
方法来自https://blog.csdn.net/u013028556/article/details/17092307
可以看出这个是与链接有关,那么我想,如果它链接不上,那其他在/lib64下的库理应也连接不上啊,通过ldd查看gdb依赖的库:这个问题的根源在了下面*的前后,所以这里应该说明是链接的上的。
ldd /usr/bin/gdb
linux-vdso.so.1 (0x00007ffeb85f5000)
libreadline.so.7 => /usr/lib64/libreadline.so.7 (0x00007f4eb2906000)
*********************
libguile-2.0.so.22 => /usr/lib64/libguile-2.0.so.22 (0x00007f4eb1ac0000)
*********************
libbz2.so.1 => /usr/lib64/libbz2.so.1 (0x00007f4ead330000)
libpcre.so.1 => /usr/lib64/libpcre.so.1 (0x00007f4ead0bf000)
那么去查了加载的动态库
ldconfig -v
很显然看到了/lib64(也就是/usr/lib64是加载了的),之后去查了好像是动态库扫描设置的地方
[root@localhost ld.so.conf.d]# pwd
/etc/ld.so.conf.d
[root@localhost ld.so.conf.d]# ls
bind-export-x86_64.conf kernel-4.18.0-80.el8.x86_64.conf
dyninst-x86_64.conf libiscsi-x86_64.conf
[root@localhost ld.so.conf.d]# cat *
/usr/lib64//bind9-export/
/usr/lib64/dyninst
# Placeholder file, no vDSO hwcap entries used in this kernel.
/usr/lib64/iscsi
确实,这里并没有加载/lib64,是加载了它们的子库,但是这部分内容由于我不确定是否如此,之后学习这个文件夹下文件功用后再补上。此外,是否有可能gdb本身就是按照环境变量名称去加载的这个库呢?
这次的问题让人云里雾里的,留为纪念,希望以后我能搞明白。