Я не уверен, работает ли мой LD_LIBRARY_PATH
.
Я установил Qt5.2.1 в Ubuntu и попытался запустить приложение из командной строки, используя sudo ./App1
. (App1 требуется доступ sudo, поэтому я выполнил этот путь)
Папка с файлами * .so Qt5.2.1/Tools/QtCreator/lib/qtcreator
находится в файле LD_LIBRARY_PATH
в bashrc
, но я получаю следующую ошибку
./App1: error while loading shared libraries: libQt5Quick.so.5: cannot open shared object file: No such file or directory
Когда я скопировал все файлы Qt so из QtCreator в /usr/lib
, приложение работало.
Может кто-нибудь помочь мне понять концепцию, почему она не может взять библиотеку из LD_LIBRARY_PATH
, тогда как она работает с Qt, так что файлы по стандартному пути /usr/lib
Кроме того, что должно сделать это, не копируя файлы .so в /usr/lib
.
Ваш пользователь LD_LIBRARY_PATH
не будет, по умолчанию, наследован sudo средой. Согласно sudoers странице справочника (man sudoers
):
By default, the env_reset option is enabled. This causes commands to be
executed with a new, minimal environment. On AIX (and Linux systems
without PAM), the environment is initialized with the contents of the
/etc/environment file. The new environment contains the TERM, PATH,
HOME, MAIL, SHELL, LOGNAME, USER, USERNAME and SUDO_* variables in addi‐
tion to variables from the invoking process permitted by the env_check
and env_keep options. This is effectively a whitelist for environment
variables.
Примечание, что env_keep
вряд ли будет работать на LD_LIBRARY_PATH
по причине, отмеченной позже в разделе:
Note that the dynamic linker on most operating systems will remove vari‐
ables that can control dynamic linking from the environment of setuid
executables, including sudo. Depending on the operating system this may
include _RLD*, DYLD_*, LD_*, LDR_*, LIBPATH, SHLIB_PATH, and others.
These type of variables are removed from the environment before sudo even
begins execution and, as such, it is not possible for sudo to preserve
them.
необходимо или найти способ сделать выполнение приложения без sudo или установить библиотеки, в которых это нуждается в одном из стандартных местоположений библиотеки.