Я скомпилировал и собрал библиотеку отдыха casablanca c ++ в своем домашнем каталоге, где мой абсолютный путь к необходимому файлу .so был /home/dev/casablanca/Release/build.release/Binaries/libcpprest.so
, То, что я хотел сделать, это просто cp
и мимо этого .so файла /usr/lib/..
путь к поиску по умолчанию в lib ../
чтобы я мог легко связать его с помощью следующей команды:
g++ index.cpp -I/home/dev/casablanca/Release/include -lcpprest -std=c++11
который скомпилирован нормально, но когда я запустил ./a.out, я получил типичную ошибку во время выполнения:
couldn't load shared library: libcpprest.so
даже после добавления пути по умолчанию для libcpprest.so в LD_LIBRARY_PATH.
Однако все работало нормально, если я связал каталог, в котором изначально был создан бинарный файл:
// ./a.out runs just fine
g++ index.cpp -I/home/dev/casablanca/Release/include \
-L/home/dev/casablanca/Release/build.release/Binaries -lcpprest -std=c++11
Я предполагаю, что причина, по которой я не могу просто переместить объект .so, куда я хочу его добавить, заключается в том, что компилятор каким-то образом сохраняет ссылки на него. Как я могу установить этот бинарный файл по другому пути?
Я собрал Касабланку на моем Linux Debian ( https://git01.codeplex.com/casablanca ) с процедурой https://casablanca.codeplex.com/wikipage?title=Setup%20and%20Build%20on%20Linux&referringTitle = документация
после компиляции я получаю libcpprest.so с этим (objdump):
SONAME libcpprest.so.2.2
поэтому вы можете скопировать libcpprest.so.2.2 в /usr/lib/libcpprest.so.2.2
или используйте инструмент ldconfig для этого.
заглянув в Release / build.release / Binaries, вы найдете:
libcpprest.so -> libcpprest.so.2.2
libcpprest.so.2.2
затем libcpprest.so это просто ссылка, настоящая библиотека это libcpprest.so.2.2
Раздел, на который вы ссылаетесь, настроен RPATH переключатель:
g ++ -Wl, -rpath, / path / to / lib …