Любой способ изменить ссылки, чтобы избежать LD_PRELOAD на HPUX? - PullRequest
2 голосов
/ 23 апреля 2009

Мне кажется, я понимаю, почему мне нужно LD_PRELOAD установить при загрузке многопоточного приложения, которое загружает однопотоковую библиотеку, которая загружает libcl.2, но мне было интересно, могу ли я использовать некоторые настройки компоновщика, чтобы избежать этого. Любая помощь приветствуется.

Обновление:

Perl загружает динамический /usr/lib/libc.2 Perl загружает DB2.sl DB2 пытается загрузить динамический /usr/lib/libcl.2

Может ли это быть фактом , что что-то с этим общим именем объекта уже загружено, а затем завершается ошибкой.

/ usr / lib> pwd

/ usr / lib

/ usr / lib> ls -lt | grep libcl.2

-r-xr-xr-x 1 бункер 1261568 14 февраля 2003 г. libcl.2

lrwxr-xr-x 1 root sys 9 ноября 21 2002 г. libcl.sl -> ./libcl.2

Теперь причина отказа искать что-то с таким же именем может быть объяснена выводом chattr:

Оба поля имеют отключенные поля, поэтому они не будут смотреться в окружении и не будут использовать альтернативное имя

чатр на Perl Perl:

     shared executable
     shared library dynamic path search:
         SHLIB_PATH     disabled  second
         embedded path  disabled  first  Not Defined
     shared library list:
         dynamic   /usr/lib/libnsl.1
         dynamic   /usr/lib/libnm.sl
         dynamic   /usr/lib/libdld.2
         dynamic   /usr/lib/libm.2
         dynamic   /usr/lib/libsec.2
         dynamic   /usr/lib/libpthread.1
         dynamic   /usr/lib/libc.2

чатр на DB2.sl DB2.sl:

     shared library
     shared library dynamic path search:
         SHLIB_PATH     disabled  second
         embedded path  disabled  first  Not Defined
     shared library list:
         dynamic   /opt/IBM/db2/V8.1/lib/libdb2.sl
         dynamic   /usr/lib/libcl.2

Может быть, настройки чата одной из библиотек могут быть изменены?

Обновление: почему бы просто не заставить их использовать одно и то же имя для библиотеки.

Ответы [ 3 ]

1 голос
/ 04 июня 2009

Я написал статью об общих библиотеках в HP-UX и попытался сделать ее понятной и полной. Я обнаружил, что вынужден отлаживать, почему программы не могут найти свои библиотеки, и поэтому задокументировал это.

Три основных места, которые будут влиять на поиск в библиотеке: 1) / etc / SHLIBPATH; 2) переменные среды; и 3) путь поиска встроенной библиотеки.

К сожалению, это резкое упрощение: лучшая ссылка, которую я могу предложить, - это статья, которая объединяет все (на мой взгляд, любым способом).

1 голос
/ 24 апреля 2009

В зависимости от вашего компилятора / компоновщика (от мыслей о машинах HPUX, на которые я вошел более десяти лет назад, я могу вздрогнуть), --rpath может помочь: насколько я понимаю, в вашем случае rtld смотрит не в том месте во-первых, вот почему вы хотите предварительно загрузить какую-то другую версию библиотеки, верно? В этом случае rpath вставит дополнительное место поиска в скомпилированный двоичный файл, который вы можете использовать для указания его на каталог, из которого поступает предпочитаемая вами версия.

Надеюсь, это поможет. -V

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

Нет флагов компоновщика, чтобы избежать этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...