Относительный путь для разделяемых библиотек при анализе дампов ядра - PullRequest
1 голос
/ 18 ноября 2010

Можно ли указать относительные пути для разделяемых библиотек при выполнении анализа ядра (я хотел бы указать относительные пути во время компиляции, а не во время отладки)

(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. RPATH с $ ORIGIN предназначен для относительного пути относительно расположения исполняемого файла. Но это не соответствует моим потребностям, потому что расширяется до абсолютного пути, когда я пытаюсь провести анализ ядра.

Так, как я могу указать относительный путь для разделяемых библиотек относительно местоположения исполняемого файла?

Ответы [ 2 ]

1 голос
/ 01 декабря 2010

Кажется, что GDB 7.2 в настоящее время не поддерживает RPATH.

В связи с этой проблемой открыто две ошибки: http://sourceware.org/bugzilla/show_bug.cgi?id=12250 http://sourceware.org/bugzilla/show_bug.cgi?id=12249

0 голосов
/ 18 ноября 2010

Обычно пути к разделяемым библиотекам не имеют значения во время компоновки (если вы не используете rpath, который сохраняет путь к библиотеке в самой разделяемой библиотеке).

Когда программа запускается или отлаживается, общие библиотеки ищутся по путям, заданным в переменных оболочки LD_LIBRARY_PATH и /etc/ld.so.conf (/etc/ld.so.conf.d/). LD_LIBRARY_PATH имеет более высокий приоритет, чем ld.so.conf.

export LD_LIBRARY_PATH = .. / path / to / my / lib1: / path2

Нет проблем использовать относительный путь, он тоже будет работать

Библиотека программ HOWTO

...