Здравствуйте.
Запускаю дотнетовскую программу на бубунте. Программа настраивает например LD_LIBRARY_PATH.
Далее вызывается библиотека, которая должна искать so файл в LD_LIBRARY_PATH, но не находит.
Причем если до вызова программы сделать export LD_LIBRARY_PATH=чтотам (или еще проще
export LD_LIBRARY_PATH=чтотам && dotnet app), то все работает.
Вопрос -- почему так? Может библиотека ищет переменные окружения в контексте родительского процесса, т.е. shell
в данном случае? Но кажется, что это не должно зависеть от библиотеки. Тогда что?
Т.е., библиотека не видит вновь созданные переменные окружения в текущем процессе, почему так?
Заранее благодарю.
Здравствуйте, Sharov, Вы писали:
S>Запускаю дотнетовскую программу на бубунте. Программа настраивает например LD_LIBRARY_PATH.
Каким образом настраивает?
S>Далее вызывается библиотека, которая должна искать so файл в LD_LIBRARY_PATH, но не находит.
Каким образом должна искать?
S>Причем если до вызова программы сделать export LD_LIBRARY_PATH=чтотам (или еще проще
S>export LD_LIBRARY_PATH=чтотам && dotnet app), то все работает.
Наверное, имелось в виду
LD_LIBRARY_PATH=чтотам dotnet app
чтобы экспортом не портить текущее окружение.
S>Вопрос -- почему так? Может библиотека ищет переменные окружения в контексте родительского процесса, т.е. shell
S>в данном случае? Но кажется, что это не должно зависеть от библиотеки. Тогда что?
Предположу, что не работает dlopen, и это действительно так. При инициализации libdl вычитывает из окружения LD_LIBRARY_PATH, парсит его и больше к нему не возвращается, так что все модификации этой переменной в самом приложении бесполезны.
S>Т.е., библиотека не видит вновь созданные переменные окружения в текущем процессе, почему так?
Точно не видит?
S>Запускаю дотнетовскую программу на бубунте. Программа настраивает например LD_LIBRARY_PATH.
S>Далее вызывается библиотека, которая должна искать so файл в LD_LIBRARY_PATH, но не находит.
Более развернутый ответ — здесь:
https://stackoverflow.com/questions/19337926/why-change-in-ld-library-path-at-runtime-dosent-reflect-on-the-executable-once