LIBRARY_PATH не справляется с символическими ссылками на запрошенные библиотеки

Отправная точка

Определенный код, который я получил для внутреннего использования, требует, чтобы библиотеки были скомпилированы с mpicxx, скажем, -lboost_filesystem, Здания идут гладко, если я установлю

export LIBRARY_PATH=<boost lib directory>
export LD_LIBRARY_PATH=<boost lib directory>:$LD_LIBRARY_PATH

Обратите внимание, что каталог библиотеки Boost находится в домашней сети, и это нельзя изменить.

действие

Для более аккуратного управления библиотеками я подумал о создании еще одного локального каталога ~/libимея drwxr-xr-x разрешения и содержащие символические ссылки на библиотеки конкретных пакетов.

Содержимое этого хранилища (ll ~\lib)

lrwxrwxrwx 1 ... libboost_filesystem.a -> <boost lib directory>/libboost_filesystem.a*
lrwxrwxrwx 1 ... libboost_filesystem.so.1.62.0 -> <boost lib directory>/libboost_filesystem.so.1.62.0*
lrwxrwxrwx 1 ... libboost_filesystem.so@ -> <boost lib directory>/libboost_filesystem.so.1.62.0*

Ссылки содержат абсолютные пути и хорошо и живы. Целевые файлы имеют разрешения 755.

вопрос

Однако, если я собираю ту же программу с

export LIBRARY_PATH=<lib repository>
export LD_LIBRARY_PATH=<lib repository>:$LD_LIBRARY_PATH

компоновщик выдает ошибку перемещения и неверного значения

/usr/bin/ld: ~/lib/../lib/libboost_filesystem.a(operations.o): relocation R_X86_64_PC32 against symbol `_ZN5boost6detail15sp_counted_base7destroyEv' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status

диагностики

Я приписал эту ошибку некоторой путанице, возникающей из LIBRARY_PATH, поскольку сборка завершается успешно, если я установил

export LIBRARY_PATH=<boost lib directory>  # see Starting point
export LD_LIBRARY_PATH=<lib repository>:$LD_LIBRARY_PATH  # see Action

Это бросает мне вызов, потому что содержание ~/lib указывает на одинаковые элементы в библиотеках пакетов. Я предполагал, что символические ссылки будут изящно разыменованы. Введение символических ссылок сбивает с толку процессы компиляции.

Вопросы

Выделил ли я настоящую причину этой проблемы?

Узнаваема ли эта ситуация?

Что может быть причиной путаницы?

Есть ли способ обойти это?

0 ответов

Другие вопросы по тегам