简体   繁体   中英

Copy and pasting .so file doesn't work with linker

I compiled and built the casablanca c++ rest library in my home directory where my absolute path to the necessary .so file was /home/dev/casablanca/Release/build.release/Binaries/libcpprest.so . What I wanted to do was to simply cp and past that .so file to /usr/lib/.. path to default lib search ../ so that I could easily link it with the following command:

g++ index.cpp -I/home/dev/casablanca/Release/include -lcpprest -std=c++11

which compiled fine, but when I ran ./a.out I got the typical runtime error:

couldn't load shared library: libcpprest.so

even after adding the default path of libcpprest.so to LD_LIBRARY_PATH.

However everything worked just fine if I linked the directory where the binary was originally created at:

// ./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

I'm guessing that the reason why I can't simply move the .so object where I want to add it is somehow the compiler keeps references to it somehow. How can I install this binary in a different path?

The section you are referring to is tuned by the rpath switch:

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

I did compile casablanca on my linux debian ( https://git01.codeplex.com/casablanca ) with procedure https://casablanca.codeplex.com/wikipage?title=Setup%20and%20Build%20on%20Linux&referringTitle=Documentation

after compilation i get a libcpprest.so with that (objdump) :

SONAME libcpprest.so.2.2

so you might want to copy libcpprest.so.2.2 to /usr/lib/libcpprest.so.2.2

or use ldconfig tool to do so.

looking into Release/build.release/Binaries you will find :

libcpprest.so -> libcpprest.so.2.2
libcpprest.so.2.2

then libcpprest.so is just a link , real library is libcpprest.so.2.2

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM