Я скомпилировал и построил остальную библиотеку casablanca C++ в своем домашнем каталоге, где мой абсолютный путь к необходимому файлу .so был /home/dev/casablanca/Release/build.release/Binaries/libcpprest.so
. Что я хотел сделать, так это просто cp
и вставить этот файл .so в /usr/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 туда, куда я хочу его добавить, заключается в том, что компилятор каким-то образом сохраняет ссылки на него. Как я могу установить этот двоичный файл по другому пути?
a.out
, который работает просто отлично, не должен работать вообще, потому что-L
не устанавливает никакого пути для поиска во время выполнения. Вы, наверное, не все рассказываете. Используйтеldd
для своего исполняемого файла и библиотек и убедитесь, что среда одинакова во всех случаях. Кроме того, что это заusr/lib/..
? Вы работаете как root и сбрасываете все на/usr
? - person n. 1.8e9-where's-my-share m.   schedule 06.11.2014ldd
в своих исполняемых файлах и библиотеках? В выводе нет ничего подозрительного? - person n. 1.8e9-where's-my-share m.   schedule 06.11.2014