Гуру говорят, что LD_LIBRARY_PATH плох - какова альтернатива?

Я предпочитаю вообще не использовать префикс для переменных-членов. Для тех, кто объявлен вне метода, я использую «this.memberVariableName», чтобы отличать их от тех, которые объявлены внутри метода.

25
задан alanc 25 July 2012 в 00:10
поделиться

3 ответа

You can try adding:

-Wl,-rpath,path/to/lib

to the linker options. This will save you the need to worry about the LD_LIBRARY_PATH environment variable, and you can decide at compile time to point to a specific library.

For a path relative to the binary, you can use $ORIGIN, eg

-Wl,-rpath,'$ORIGIN/../lib'

($ORIGIN may not work when statically linking to shared libraries with ld, use -Wl,--allow-shlib-undefined to fix this)

11
ответ дан 28 November 2019 в 21:47
поделиться

ответ находится в первой процитированной вами статье.

В UNIX расположение библиотеки можно указать с помощью -L dir для компилятора. .... В качестве альтернативы использованию параметров -L и -R вы можете установить переменную среды LD_RUN_PATH перед компиляцией кода.

6
ответ дан 28 November 2019 в 21:47
поделиться

Я всегда устанавливал LD_LIBRARY_PATH, и у меня никогда не было проблем.

Процитирую вашу первую ссылку:

Когда мне следует установить LD_LIBRARY_PATH? Краткий ответ: никогда. Зачем? Некоторые пользователи, похоже, устанавливают эту переменную среды из-за плохих советов других пользователей или плохо связанного кода, который они не знают, как исправить.

Это НЕ то, что я называю окончательной формулировкой проблемы . На самом деле это напоминает Мне это не нравится . [YouTube, но SFW].


Эта вторая запись в блоге ( http://blogs.oracle.com/ali/entry/avoiding_ld_library_path_the ) гораздо более откровенна о природе проблемы ... что вкратце выглядит как конфликт версий библиотеки ThisProgram требует Foo1.2, но ThatProgram требует Foo1.3, поэтому вы не можете запустить обе программы (легко). Обратите внимание, что большинство этих проблем устраняются простым сценарием-оболочкой, который устанавливает LD_LIBRARY_PATH только для исполняемой оболочки, которая (почти всегда) является отдельным дочерним процессом интерактивной оболочки.

Заметьте также, что альтернативы довольно хорошо объяснены в сообщении.

Я просто не понимаю, почему вы публикуете вопрос, содержащий ссылки на статьи, которые, очевидно, отвечают на ваш вопрос ... У вас есть конкретный вопрос что не было освещено (достаточно ясно) ни в одной из этих статей?

7
ответ дан 28 November 2019 в 21:47
поделиться
Другие вопросы по тегам:

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