我使用zlib和bzip2支持编译了boost iostreams,根据本教程https://www.boost.org/doc/libs/1_49_0/libs/iostreams/doc/installation.html:
我将工作目录更改为~/cpp_libs/boost_code/boost_1_55_0/libs/iostreams/build/并键入:
bjam -s ZLIB_SOURCE=~/cpp_libs/zlib_code/zlib-1.2.11 -s BZIP2_Source=~/cpp_libs/bzip2_code/bzip2它产生了libs:
~/cpp_libs/boost_code/boost_1_55_0/bin.v2/standalone/zlib/gcc-9/debug/libboost_zlib.so.1.55.0 ~/cpp_libs/boost_code/boost_1_55_0/bin.v2/libs/iostreams/build/bzip2/gcc-9/debug/libboost_bzip2.so.1.55.0 ~/cpp_libs/boost_code/boost_1_55_0/bin.v2/libs/iostreams/build/gcc-9/debug/libboost_iostreams.so.1.55.0
但是,现在我不知道如何链接到这个库,因为它的名字中有版本号扩展。
如果我重命名库:
libboost_zlib.so.1.55.0到libboost_zlib.so
libboost_bzip2.so.1.55.0到libboost_bzip2.so
libboost_iostreams.so.1.55.0到libboost_iostreams.so
我可以将它们与命令"-lboost_zlib -lboost_iostreams -lboost_bzip2“链接起来,但是当我运行编译后的程序时,它会打印:
./main:加载共享库时出错: libboost_iostreams.so.1.55.0: connot打开共享对象文件:没有这样的文件或目录。
那么,如何链接到这个库而不重新命名呢?
我使用的是g++ (Ubuntu9.3.0-17 ubuntu1~20.04) 9.3.0
发布于 2022-01-01 23:56:34
下面是通常用于在Linux上构建和安装共享库的工作流。不同库和所有包之间的具体细节差别很大,但它们都遵循相同的一般框架:
<libdir>/<name>.<version>,其中<libdir>是系统库安装目录,比如/usr/lib或/usr/lib64,或者可能是/lib或/lib64,或者可能有几个变体。<name>是共享库的基本名称,在您的示例中是libboost_zlib.so,是共享库或1.55.0.的时代/版本/发行版。
作为构建共享库的一部分,该库的libboost_zlib.so.1.55.、epoch和version记录在共享库本身中,在本例中是
在这一点上,
ldconfig工具会被执行.。
ldconfig完成并为标准系统共享库目录中的所有共享库创建所有所需的符号链接。在本例中,它将创建以下符号链接:libboost_zlib.so => libboost_zlib.so.1.55
libboost_zlib.so.1.55 => libboost_zlib.so.55.0这将是已安装的共享库的最终状态。当您使用共享库构建软件时,-lboost_zlib标志到链接器将导致链接器试图将可执行文件与libboost_zlib.so链接。这会读取实际共享库中编码的libboost_zlib.so.1.55 (参见上面的步骤3),并将链接的可执行文件标记为在执行时需要加载libboost_zlib.so.1.55。
当执行链接可执行文件时,尝试打开libboost_zlib.so.1.55,它使用该符号链接查找实际的共享库。
~/cpp_libs/boost_code/boost_1_55_0/libs/iostreams/build/ I将工作目录更改为
并键入:
-s ZLIB_SOURCE=~/cpp_libs/zlib_code/zlib-1.2.11
您使用了一个非标准的过程来编译和构建这些共享库。现在由您来填写缺失的步骤,完成所有的繁重工作,并创建缺少的符号链接。请注意,您可以命令ldconfig执行您的命令,通过将它指向您的安装目录,请参阅它的手册页面以获得更多信息。
您还需要处理这样一个事实,即共享库最终安装在一个非标准目录中,运行时加载程序默认将而不是搜索。在将代码链接到该目录中的共享库时,需要使用其他编译选项(即-rpath),但这将是一个单独的问题。
https://stackoverflow.com/questions/70552547
复制相似问题