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
Несмотря на чтение многочисленных статей и сообщений по подобным темам, я пока не нашел решения.
Ответы
Ответ 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' после создания файла, который заставит его обновить его кеш.