Копирование и вставка .so файл не работает с компоновщиком

Я скомпилировал и собрал библиотеку отдыха 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, куда я хочу его добавить, заключается в том, что компилятор каким-то образом сохраняет ссылки на него. Как я могу установить этот бинарный файл по другому пути?

1

Решение

Я собрал Касабланку на моем 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

1

Другие решения

Раздел, на который вы ссылаетесь, настроен RPATH переключатель:

g ++ -Wl, -rpath, / path / to / lib …

1

По вопросам рекламы [email protected]