LD_PRELOAD изменяет LD_LIBRARY_PATH - PullRequest
2 голосов
/ 08 июля 2011

У меня особенная проблема. У меня есть общая библиотека my_tracker.so, которую я создал с помощью gcc-4.2. Эта общая библиотека теперь зависит от libgcc_s.so.1 (GCC 4.2). Я сделал 'ldd my_tracker.so', и он взял libgcc_s.so.1 из /lib64.

Я управляю

'LD_PRELOAD=my_tracker.so LD_LIBRARY_PATH=[vnc_install]/lib/vnclibs:$LD_LIBRARY_PATH vncserver'

внутри моего сценария. Я хочу убедиться, что vncserver получает свой libgcc_so.1 (GCC 3.2.3) из [vnc_install]/lib/vnclibs/ и, следовательно, помещает его перед LD_LIBRARY_PATH.

Однако после выполнения моего скрипта похоже, что vncserver забирает libgcc_s.so.1 (GCC 4.2) из ​​/lib64.

Загружает ли моя предварительно загруженная разделяемая библиотека my_tracker.so LD_LIBRARY_PATH, где была найдена libgcc_s.so.1 (GCC 4.2)?

Если так, как я могу исправить эту проблему?

С уважением John

1 Ответ

0 голосов
/ 14 июля 2011

Решением этого является получение patchelf и использование его для исправления вашего двоичного файла и любых скопированных библиотек для использования RPATH.Тогда вы можете полностью игнорировать LD_LIBRARY_PATH.И если вам нужен другой файл ld-linux.so для загрузки вашего бинарного файла, patchelf может исправить и бинарный файл, чтобы найти его.

...