Каковы основные этапы выполнения в Linux ( как программа в основном выполняется в Linux)?

Правдоподобное объяснение разницы в поведении состоит в том, что рабочие и нерабочие команды загружают разные библиотеки, потому что у них разные настройки для пути поиска библиотек LD_LIBRARY_PATH . Существуют и другие переменные среды, которые могут иметь значение, но менее вероятны, например LD_PRELOAD , PATH (если ./ Logic - это сценарий, который зависит от некоторых исполняемых файлов - но сообщение об ошибке не согласуется с этим) и т. д.

Правдоподобное объяснение того, почему вызов команды из интерактивного экземпляра bash не работает, но запуск команды непосредственно из sudo работает, заключается в том, что вы устанавливаете эту среду в .bashrc , файл, запускаемый интерактивными экземплярами bash. Запуск sudo очищает почти все переменные среды, поэтому sudo ./Logic работает; но sudo bash , за которым следует ./ Логика не работает, потому что запуск bash снова устанавливает эти переменные.

Вы должны установить переменные среды в .profile (который выполняется при запуске сеанса), а не в .bashrc . Ваши симптомы характерны для одной из проблем с изменением переменных среды в .bashrc .

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

5
12.11.2017, 02:18
0 ответов

Теги

Похожие вопросы