Ошибка, в то время как загрузка совместно использовала библиотеки

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
5
23.11.2011, 22:33
4 ответа

То, что имеет значение, - то, какой дистрибутив 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).

Ссылка, если Вы хотели бы тот.

4
27.01.2020, 20:41

Строка:

$ 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 после того как это установлено и взгляд на то, где это пытается загрузить библиотеку из.

0
27.01.2020, 20:41
  • 1
    Если это было проблемой, не был бы ld жаловаться во время здания? Приложение, как говорят, получает созданный штраф. –  rozcietrzewiacz 24.11.2011, 21:25

Необходимо сказать систему, где искать библиотеки. Это задание сделано /etc/ld.so.cache. Можно включить библиотеки или целые каталоги /etc/ld.so.conf.

Можно восстановить кэш путем выполнения:

# /sbin/ldconfig -v
-1
27.01.2020, 20:41
  • 1
    На хинду это не способ сделать это: верхняя строка /etc/ld.so.conf доказывает его ярко, говоря "ld.so.conf автоматически сгенерированный огибающим обновлением; делайте все изменения в содержание/etc/env.d каталога" –  rozcietrzewiacz 24.11.2011, 21:02
  • 2
    ... И /etc/env.d получен на каждой начальной загрузке, таким образом, Вы освободили бы все свои изменения. –  rozcietrzewiacz 24.11.2011, 21:04
  • 3
    Хорошо я не знаю хинду, 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: Так как Вы просто говорите о случае, где Вы разрабатываете проект, я думаю, что этот временный путь является более соответствующим, чем помещение его в конфигурационных файлах в масштабе всей системы.

1
27.01.2020, 20:41

Теги

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