rpath не установлен в сложной команде make (появляется дважды, сначала имеет приоритет?) - PullRequest
0 голосов
/ 16 ноября 2018

Я работаю с большим проектом CMake и пытаюсь отладить, почему rpath в разделяемой библиотеке вообще не устанавливается.Перебирая подробный вывод, можно найти команду build:

 /usr/bin/c++  -fPIC  -DVERSION_INFO=\"0.0.1\"  -fPIC -std=c++14 \
-fopenmp -Wall -Wextra -O2 -DNDEBUG  -Wl,-rpath \
-Wl,/usr/lib/openmpi/lib  -Wl,--enable-new-dtags -shared \
-Wl,-soname,libScannerBitCAPI.so.1 \
-o ../../../../../lib.linux-x86_64-3.6/pyscannerbit/libScannerBitCAPI.so. \
CMakeFiles/ScannerBitCAPI.dir/ScannerBit/examples/ScannerBit_CAPI.cpp.o \
<tonnes more object files> \ 
/usr/lib/openmpi/lib/libmpi_cxx.so /usr/lib/openmpi/lib/libmpi.so \
/usr/lib/openmpi/lib/libmpi.so -ldl -lgsl -lgslcblas -lm \
/home/farmer/anaconda3/envs/general/lib/libhdf5.so -lrt -lpthread \
/home/farmer/anaconda3/envs/general/lib/libz.so -ldl -lm \
/home/farmer/anaconda3/envs/general/lib/libpython3.6m.so \
../../../../../lib.linux-x86_64-3.6/pyscannerbit/libyaml-cpp.so.0.6.2 \
-lgsl -lgslcblas /home/farmer/anaconda3/envs/general/lib/libhdf5.so \
-lrt -lpthread /home/farmer/anaconda3/envs/general/lib/libz.so \
/home/farmer/anaconda3/envs/general/lib/libpython3.6m.so \
-Wl,-rpath,/home/farmer/anaconda3/envs/general/lib/python3.6/site-packages/pyscannerbit:/usr/lib/openmpi/lib:/home/farmer/anaconda3/envs/general/lib \

Теперь, что меня здесь привлекает, так это то, что команда -rpath появляется дважды, а первая пуста.Это кажется довольно подозрительным.

Но прежде чем я попытаюсь отследить, как эти флаги оказались там, я хотел проверить;это на самом деле, как компилятор (в данном случае gcc) будет интерпретировать эти флаги?В случае множественного вхождения -rpath все, кроме первого, игнорируются?Моя интерпретация руководства - нет, это не то, как оно работает:

-rpath=dir
       Add a directory to the runtime library search path.  This is used when linking an ELF executable with shared objects.  All
       -rpath arguments are concatenated and passed to the runtime linker, which uses them to locate shared objects at runtime.

Похоже, что вы можете добавить много -rpaths, используя флаг несколько раз.

Итакчто еще может быть не так?Почему эта команда не приводит к установке каких-либо rpath в моей общей библиотеке libScannerBitCAPI.so?

...