Почему изменение LD_LIBRARY_PATH во время выполнения не влияет на исполняемый файл после загрузки исполняемого файла


person Thiyagarajan    schedule 12.10.2013    source источник
comment
Я бы просто закодировал оболочку оболочки, которая соответствующим образом устанавливает LD_LIBRARY_PATH перед exec-ингом двоичного исполняемого файла ELF. Это обычная практика (большинство дистрибутивов делают это для firefox)   -  person Basile Starynkevitch    schedule 12.10.2013
comment
привет, Basile, спасибо за правильный ответ. Я пытаюсь написать оболочку оболочки, как вы сказали, но проблема в том, что мне нужно запустить скрипт как . filename.sh (в терминале) то работает только путь экспорта. если я попытаюсь запустить свое приложение при запуске системы, я не смогу добиться того же.   -  person Thiyagarajan    schedule 14.10.2013
comment
Нет, просто chmod a+x filename.sh, поместите filename.sh в какой-нибудь каталог в вашем PATH, и вы сможете запускать его просто как filename.sh   -  person Basile Starynkevitch    schedule 14.10.2013
comment
Я запускаю свое приложение при запуске системы с помощью application.sh, который выполняет имя файла.sh (скрипт оболочки для установки пути), но он не работает, путь не установлен   -  person Thiyagarajan    schedule 14.10.2013
comment
Затем используйте полный путь, например, например. $HOME/bin/filename.sh или /usr/local/bin/filename.sh. Загляните внутрь firefox или mozilla ; это вообще скрипт оболочки....   -  person Basile Starynkevitch    schedule 14.10.2013


Ответы (1)


К сожалению, установка LD_LIBRARY_PATH из работающей программы не повлияет на это. Причина этого в том, что LD_LIBRARY_PATH обрабатывается загрузчиком динамических ссылок (ld.so), который является программой, запускающей вашу программу. Сама ваша программа не обрабатывает LD_LIBRARY_PATH, поэтому ее изменение не будет иметь никакого эффекта.

person Nildram    schedule 12.10.2013
comment
Изменение LD_LIBRARY_PATH не имеет никакого эффекта, за исключением случаев, когда программа вызывается после dlopen для загрузки плагина. - person Basile Starynkevitch; 12.10.2013
comment
Согласовано. Любые дочерние процессы (исходного процесса) унаследуют изменение в LD_LIBRARY_PATH, сделанное в этом исходном процессе. Таким образом, установка LD_LIBRARY_PATH в вашей программе, затем разветвление и уничтожение родителя должны поставить вас туда, где (я полагаю) вы хотите быть с точки зрения пути загрузки. - person Nildram; 12.10.2013