man sudoers
на Debian упоминает другую возможность. Не уверенный, который путь вокруг Вас хочет, но Ваш вопрос кажется, что Вы хотели бы иметь env_reset
опция от /etc/sudoers
- противоположное в основном env_keep
список. Для установки надлежащего HOME
можно использовать -H
опция к sudo
непосредственно или, снова в sudoers
, с always_set_home
опция.
Кроме того, Вы могли использовать env_file
для определения точной среды, Вы хотите передать. Однако я думаю, что лучше, если Вы проверяете env_*
опции от man sudoers
, потому что /etc/sudoers
средства управления все это и в этом суть обращаться к.
Вот часть контекста, в котором я использую env_reset
в моем sudoers
файл:
Defaults !lecture
Defaults env_reset
Defaults syslog=auth
Defaults log_year
То, что имеет значение, - то, какой дистрибутив Linux каждая машина использование, потому что они обрабатывают пути к библиотеке по-другому. На хинду (Sabayon) машина, если Вы хотите, чтобы сторонняя библиотека была применима в масштабе всей системы, Вы должны:
Создайте файл под /etc/env.d/
это будет содержать установку новой среды. Файлы называют с помощью схемы [0-9][0-9]somename
- две начальных цифры выбирают порядок, в котором они используются. Хорошая практика требует, чтобы Ваши пользовательские настройки были добавлены (почти) в последний раз, таким образом, 99
надлежащее начало, пока оно работает. Переходить к сути дела: Создайте файл, названный как
/etc/env.d/99mythirdpartylib
содержа
LDPATH=/path/to/your/library
Для внесения изменений активными без перезагрузки работайте как корень:
env-update && source /etc/profile
(который будет обновлять среду, а также работать ldconfig
).
Ссылка, если Вы хотели бы тот.
Строка:
$ gcc file1.o file2.o -l3rdpartylib -L lib/3rdpartylib -o myapp
поиски названного файла lib3rdpartylib.so
в Вашем пути к библиотеке, который даже не включает lib/3rdpartylib
! при рассмотрении gcc страницы справочника она указывает это при определении пути к библиотеке с -L
это должно прибыть перед -l
флаги, или это не будет искаться. Действительно, простое решение состоит в том, чтобы просто связаться с самой библиотекой:
$ gcc file1.o file2.o lib/3rdpartylib/3rdpartylib.so -o myapp
Тем путем библиотека будет разыскиваться в путях к библиотеке и динамично загружаться когда myapp
выполнения.
Если Вы хотите проверить его, просто сделайте strace -eopen ./myapp
после того как это установлено и взгляд на то, где это пытается загрузить библиотеку из.
ld
жаловаться во время здания? Приложение, как говорят, получает созданный штраф.
– rozcietrzewiacz
24.11.2011, 21:25
Необходимо сказать систему, где искать библиотеки. Это задание сделано /etc/ld.so.cache
. Можно включить библиотеки или целые каталоги /etc/ld.so.conf
.
Можно восстановить кэш путем выполнения:
# /sbin/ldconfig -v
/etc/ld.so.conf
доказывает его ярко, говоря "ld.so.conf автоматически сгенерированный огибающим обновлением; делайте все изменения в содержание/etc/env.d каталога"
– rozcietrzewiacz
24.11.2011, 21:02
/etc/env.d
получен на каждой начальной загрузке, таким образом, Вы освободили бы все свои изменения.
– rozcietrzewiacz
24.11.2011, 21:04
env-update
сделает точно, что я говорю: env-update will also extract the information from the LDPATH variable and use that to create /etc/ld.so.conf. After this, it will run ldconfig to recreate the /etc/ld.so.cache
. Таким образом, Ваш ответ является лучшим ;-)
– fab
24.11.2011, 22:33
Если Вы не хотите устанавливать глобальный путь поиска библиотеки для своей целой системы с /etc/env.d
подход, Вы можете также:
Просто установите LD_LIBRARY_PATH
к ПУТИ Вашей библиотеки (Вы действительно устанавливали его на саму библиотеку, которая не будет работать), то же, которое Вы устанавливаете с -L
параметр к gcc, например.
export LD_LIBRARY_PATH="$PROJ/lib/3rdpartylib/:$LD_LIBRARY_PATH"
(последняя часть для сохранения переменной, если это было уже установлено, которым это не должно обычно быть). Это будет только работать в Вас текущая оболочка, и необходимо будет установить ее снова каждый раз.
Или Вы связываете использование 'статической' библиотеки пути поиска как это:
gcc file1.o file2.o -L./lib/3rdpartylib -Wl,-rpath=./lib/3rdpartylib -l3rdpartylib -o myapp
-Wl
указывает аргументы строки команды, которые не будут обработаны gcc, но вместо этого переданы компоновщику. Так как путь поиска библиотеки будет записан в двоичный файл, это будет работать даже над различными машинами (если библиотека существует),
PS: Так как Вы просто говорите о случае, где Вы разрабатываете проект, я думаю, что этот временный путь является более соответствующим, чем помещение его в конфигурационных файлах в масштабе всей системы.