我在主目录中编译并构建了 casablanca c++ rest 库,其中必要的 .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 对象移动到我想要添加它的位置的原因是编译器以某种方式保留了对它的引用。如何将此二进制文件安装到不同的路径?
最佳答案
我确实在我的 linux debian ( https://git01.codeplex.com/casablanca ) 上用过程 https://casablanca.codeplex.com/wikipage?title=Setup%20and%20Build%20on%20Linux&referringTitle=Documentation 编译了 casablanca
编译后我得到一个 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
关于c++ - 复制和粘贴 .so 文件不适用于链接器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26773076/