Gdb 分析核心转储时共享库的相对路径
在进行核心分析时,是否可以为共享库指定相对路径(我希望在编译时而不是调试时指定相对路径) 我将更具体地说明什么和为什么不适合我:Gdb 分析核心转储时共享库的相对路径,gdb,shared-libraries,relative-path,coredump,Gdb,Shared Libraries,Relative Path,Coredump,在进行核心分析时,是否可以为共享库指定相对路径(我希望在编译时而不是调试时指定相对路径) 我将更具体地说明什么和为什么不适合我: LD_LIBRARY_PATH可以指定相对于当前工作目录的相对路径。这不符合我的需要,因为我需要关于可执行文件位置的相对路径 带有$ORIGIN的RPATH是相对于可执行文件位置的相对路径。但它不适合我的需要,因为当我尝试进行核心分析时,它扩展到了绝对路径 那么,如何根据可执行文件的位置为共享库指定相对路径呢?通常,在链接期间,共享库路径并不重要(除非您使用的是rpa
那么,如何根据可执行文件的位置为共享库指定相对路径呢?通常,在链接期间,共享库路径并不重要(除非您使用的是
rpath
,它将库路径保留在共享库本身中)
当程序运行或调试时,在shell变量LD_LIBRARY_PATH
和/etc/LD.so.conf
(/etc/LD.so.conf.d/
)中设置的路径中搜索共享库LD\u LIBRARY\u PATH
的优先级高于LD.so.conf
导出LD_LIBRARY_PATH=../PATH/to/my/lib1:/path2
使用相对路径没有问题,它也可以工作
通常,在链接期间,共享库路径并不重要(除非您使用的是
rpath
,它将库路径保留在共享库本身中)
当程序运行或调试时,在shell变量LD_LIBRARY_PATH
和/etc/LD.so.conf
(/etc/LD.so.conf.d/
)中设置的路径中搜索共享库LD\u LIBRARY\u PATH
的优先级高于LD.so.conf
导出LD_LIBRARY_PATH=../PATH/to/my/lib1:/path2
使用相对路径没有问题,它也可以工作
GDB7.2目前似乎不尊重RPATH 关于此问题,有两个漏洞:
http://sourceware.org/bugzilla/show_bug.cgi?id=12249GDB7.2目前似乎不尊重RPATH 关于此问题,有两个漏洞:
http://sourceware.org/bugzilla/show_bug.cgi?id=12249但这是相对于当前工作目录的相对路径,而不是相对于需要库的可执行文件的位置。-Wl,-R$ORIGIN/./lib的问题在于它无论如何都会扩展到绝对路径。但这个相对路径至少是关于可执行文件的位置,但这是关于当前工作目录的相对路径,而不是关于需要库的可执行文件的位置。-Wl,-R$ORIGIN/./lib的问题在于它无论如何都会扩展到绝对路径。但这个相对路径至少是关于可执行文件的位置。
(gdb) info sharedlibrary
From To Syms Read Shared Object Library
0x00007f4433ffef00 0x00007f443402cc08 Yes (*) /lib/libssl.so.0.9.8
0x00007f44334d6a00 0x00007f44335e9920 Yes /lib/libc.so.6
0x00007f443423eaf0 0x00007f4434257994 Yes /lib64/ld-linux-x86-64.so.2
No ./lib/myplugin.so
No /opt/lib/mylibc.so
0x00007f443237a190 0x00007f443237d7f8 Yes /lib/librt.so.1
0x00007f44320f8ef0 0x00007f44321392d8 Yes /lib/libm.so.6
0x00007f4431ee08b0 0x00007f4431eeffe8 Yes (*) /lib/libgcc_s.so.1