2015-03-19 6 views
0

Это вопрос о центральных характеристиках пути, таких как PATH, LD_LIBRARY_PATH и LIBRARY_PATH.В Ubuntu (14.04) есть ли эквивалент /etc/ld.so.conf.d для компоновщика?

Я знаю, что существует два способа указания путей общих библиотек для загрузчика: добавьте их в LD_LIBRARY_PATH или добавьте файлы в /etc/ld.so.conf.d/. Я также знаю, что последний считается более современным и предпочтительным способом сделать это.

Я также знаю, что вы можете указать стандартные пути библиотек для компоновщика, отредактировав LIBRARY_PATH. Это все-таки «современный» способ сделать это, или есть ли теперь альтернатива «ld.so.conf.d-style», которую я должен использовать?

EDIT: Люди спрашивают "почему", так:

Я использую пакет Python (Theano), который динамически генерирует и компилирует CUDA и C++ код при запуске. Одна из библиотек, к которой он привязана, - это cuDNN от NVidia. Я не знаю, почему у разработчика Theano есть ссылка на статическую lib, а не на динамическую lib.

+0

Пожалуйста, объясните, почему вы спрашиваете. Со статически связанными бинарниками ваш вопрос не имеет никакого реального смысла. Но вы должны предпочесть динамически связанные двоичные файлы. Каковы исполняемые файлы, чьи статические библиотеки вы хотите изменить во время выполнения? –

+0

Вы ищете механизм, на который компоновщик будет обращать внимание (во время связи, а не на время запуска) при определении того, где искать статические библиотеки? –

+0

@KeithThompson yes – SuperElectric

ответ

2

Для статических библиотек не существует эквивалента ld.so.conf.d/. Вы все еще просто указываете стандартные пути поиска компоновщика через переменную окружения LIBRARY_PATH и дополнительные пути через флаги командной строки для компоновщика.

Чтобы было ясно:

  • library_path: Используется компоновщиком во время компиляции. Используется компоновщиком для поиска как статических, так и динамических библиотек.
  • LD_LIBRARY_PATH: используется загрузчиком во время выполнения, чтобы найти динамические библиотеки.
+0

Нет необходимости в стандартном пути поиска для компоновщика, и, тем не менее, для удобства есть один (LIBRARY_PATH). Я просто задавался вопросом, является ли настройка LIBRARY_PATH еще самым современным способом. – SuperElectric

+0

Хорошо, вы немного смутили нас/меня формулировкой вопроса, потому что ld.so.conf и LD_LIBRARY_PATH являются исполняемыми. Если вы действительно имеете в виду время ссылки. И да, LIBRARY_PATH - это способ сделать это, если по какой-то причине вы хотите переопределить или расширить стандартные пути библиотеки по умолчанию. Для одноразовых или конкретных приложений вы обычно используете опцию «-L» в Make-файлах. – kaylum

+0

Кажется, что LD_LIBRARY_PATH и LIBRARY_PATH выполняют одну и ту же цель, одну для динамической загрузки разделяемых библиотек, а вторую для статических компоновщиков. Так почему же это не обязательно «имеет смысл» для того, чтобы быть аналогом ld.so.conf.d/для статической привязки? Если вы отредактируете ответ на адрес, я бы выбрал его. – SuperElectric

0

Статические библиотеки разрешены в (статическом) времени ссылки и по определению не имеют каких-либо аспектов времени выполнения.

Мое мнение, что вам следует избегать использования статических библиотек и всегда предпочитать разделяемые библиотеки.