2009-04-23 2 views
2

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

Обновление:

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

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

/USR/Библиотека> PWD

/USR/Lib

/USR/Библиотека> Ls -lt | Grep libcl.2

-r-хт-хт-х 1 бин бин 1261568 Feb 14 2003 libcl.2

lrwxr-хт-х 1 корень SYS 9 21 ноября 2002 libcl.sl -> ./libcl .2

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

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

Chatr на 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 

Chatr на 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 

Может, возможно, настройки Chatr одной из библиотек будет регулируется?

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

ответ

0

Для предотвращения этого не существует флагов-линкеров.

1

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

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

+0

Хмм, я думаю, что нашел что-то здесь ... – ojblass

+0

Каждый из двоичных файлов относится к тому же файлу с другим именем ... – ojblass

+0

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

1

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

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

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

Смежные вопросы