【问题标题】:Relative path for shared libraries when analysing core dumps分析核心转储时共享库的相对路径
【发布时间】:2010-11-17 21:53:08
【问题描述】:

我做核心分析时是否可以指定共享库的相对路径(我想在编译时而不是调试时指定相对路径)

(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

我会更具体地说明什么和为什么不适合我:

  1. LD_LIBRARY_PATH 可以指定相对于当前工作目录的相对路径。这不符合我的需要,因为我需要相对于可执行文件位置的相对路径
  2. 带有 $ORIGIN 的 RPATH 旨在作为相对于可执行文件位置的相对路径。但它不适合我的需求,因为当我尝试进行核心分析时它会扩展到绝对路径。

那么我如何指定共享库相对于可执行文件位置的相对路径?

【问题讨论】:

    标签: gdb shared-libraries relative-path coredump


    【解决方案1】:

    GDB 7.2 目前似乎不尊重 RPATH。

    关于这个问题有两个错误打开: http://sourceware.org/bugzilla/show_bug.cgi?id=12250 http://sourceware.org/bugzilla/show_bug.cgi?id=12249

    【讨论】:

      【解决方案2】:

      通常共享库路径在链接期间无关紧要(除非您使用rpath,它将库路径保留在共享库本身中)。

      当程序运行或调试时,共享库在shell变量LD_LIBRARY_PATH/etc/ld.so.conf/etc/ld.so.conf.d/)中设置的路径中搜索。 LD_LIBRARY_PATH 的优先级高于 ld.so.conf

      导出 LD_LIBRARY_PATH=../path/to/my/lib1:/path2

      使用相对路径没问题,也可以

      Program Library HOWTO

      【讨论】:

      • 但这是相对于当前工作目录的相对路径,而不是相对于需要库的可执行文件的位置。 -Wl,-R$ORIGIN/../lib 的问题在于它无论如何都会扩展到绝对路径。但是这个相对路径至少是相对于可执行位置而言的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-13
      • 2018-11-06
      • 2016-03-06
      • 1970-01-01
      • 2019-02-03
      • 2011-05-19
      • 1970-01-01
      相关资源
      最近更新 更多