Есть ли способ изменить ссылку, чтобы избежать LD_PRELOAD на HPUX?

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

Обновление:

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

Возможно, что-то с таким именем общего объекта уже загружено, а затем происходит сбой.

/usr/lib>пароль

/USR/библиотека

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

-r-xr-xr-x 1 bin bin 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

Может быть настройки чата одной из библиотек подправить?

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


person ojblass    schedule 23.04.2009    source источник


Ответы (3)


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

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

person Volker Stolz    schedule 24.04.2009
comment
Я знаю, что могу использовать chatr, чтобы настроить что-то об этих отключенных линиях, но не ясно, в чем проблема. - person ojblass; 24.04.2009

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

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

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

person Mei    schedule 04.06.2009

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

person ojblass    schedule 07.11.2010