LIBRARY_PATH не справляется с символическими ссылками на запрошенные библиотеки - PullRequest
0 голосов
/ 15 января 2019

Начальная точка

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

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

NB. Каталог библиотеки 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 указывает на одинаковые элементы в библиотеках пакетов. Я предполагал, что символические ссылки будут изящно разыменованы. Введение символических ссылок сбивает с толку процессы компиляции.

Вопросы

Изолировал ли я реальный триггер этой проблемы?

Распознается ли эта ситуация?

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

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

...