复制和粘贴 .so 文件不适用于链接器

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

本文关键字:不适用 适用于 链接 文件 so 复制      更新时间:2023-10-16

我在主目录中编译并构建了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上编译了casablanca(https://git01.codeplex.com/casablanca)带程序https://casablanca.codeplex.com/wikipage?title=Setup%20and%20Build%20on%20Linux&referringTitle=文档

编译后,我得到了一个带有(objdump)的libcpprest.so:

SONAME libcpprest.so.2.2

因此,您可能需要将libcpprest.so.2.2复制到/usr/lib/libcprest.so2.2

或者使用ldconfig工具这样做。

查看Release/build.Release/Binaries,你会发现:

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

那么libcpprest.so只是一个链接,真正的库是libcppreset.so.2.2

您所指的部分由rpath开关调整:

g++-Wl、-rpath、/path/to/lib。。。

相关文章: