GCC, как добавить до стандартного пути поиска компоновщика по умолчанию? LIBRARY_PATH не работает - программирование
Подтвердить что ты не робот

GCC, как добавить до стандартного пути поиска компоновщика по умолчанию? LIBRARY_PATH не работает

Я пытаюсь выяснить, как установить некоторую переменную среды, которая заставит g++ ссылаться на правильные версии библиотек.

У меня есть некоторые старые библиотеки boost в /usr/lib 64 (ссылка на них не удалась) и новые библиотеки в /v/users/regel/lib. Поэтому компоновщик должен ссылаться на новые библиотеки.

Команда:

$ g++ test.cpp -lboost_system -L/v/users/regel/lib

правильно связывает программу. Однако я хочу установить это как каталог поиска номер 1 для компоновщика, так что мне не нужно указывать '-L' каждый раз, когда я ссылаюсь.

Следующие переменные среды, похоже, не делают трюка:

$ LIBRARY_PATH=/v/users/regel/lib g++ test.cpp -lboost_system
/tmp/regel/cc4SmBtI.o: In function `main':
test.cpp:(.text+0x5): undefined reference to `boost::system::system_category()'
collect2: error: ld returned 1 exit status

и

$ LD_LIBRARY_PATH=/v/users/regel/lib:$LD_LIBRARY_PATH g++ test.cpp -lboost_system
/tmp/regel/ccUreBZy.o: In function `main':
test.cpp:(.text+0x5): undefined reference to `boost::system::system_category()'
collect2: error: ld returned 1 exit status

Несмотря на чтение многочисленных статей и сообщений по подобным темам, я пока не нашел решения.

4b9b3361

Ответ 1

Как указано в руководстве GCC , LIBRARY_PATH - это правильная переменная среды для добавления каталогов в путь поиска библиотеки.

Если вы добавите -v в команду g++, вы должны увидеть, что он использует LIBRARY_PATH, и вы должны увидеть, что он включает указанный вами каталог и что он добавляется в команду collect2 как -L, но вы увидите, что он добавляется после стандартных каталогов, таких как -L/usr/lib и т.д.

Я не знаю, как сделать каталоги в LIBRARY_PATH первыми, я думаю, для этого вам нужно использовать -L.

Ответ 2

Попробуйте указать путь библиотеки в файле .conf в файле /etc/ld.so.conf.d/

Компонент смотрит на пути, указанные в файлах в файле/etc/ld.so.conf.d/при компоновке.

Убедитесь, что вы запустили 'ldconfig' после создания файла, который заставит его обновить его кеш.