首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >g++ boost iostreams zlib链接

g++ boost iostreams zlib链接
EN

Stack Overflow用户
提问于 2022-01-01 23:14:14
回答 1查看 235关注 0票数 1

我使用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/并键入:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-01 23:56:34

下面是通常用于在Linux上构建和安装共享库的工作流。不同库和所有包之间的具体细节差别很大,但它们都遵循相同的一般框架:

  1. 软件包构建一个安装映像,将库放置为<libdir>/<name>.<version>,其中<libdir>是系统库安装目录,比如/usr/lib/usr/lib64,或者可能是/lib/lib64,或者可能有几个变体。

  1. <name>是共享库的基本名称,在您的示例中是libboost_zlib.so,是共享库或1.55.0.

的时代/版本/发行版。

作为构建共享库的一部分,该库的libboost_zlib.so.1.55.、epochversion记录在共享库本身中,在本例中是

在这一点上,

  1. 的实际细节在不同的
  2. 发行版之间开始出现分歧。在某些情况下,此步骤是创建安装包的一部分。在其他Linux发行版上,这会在包实际安装时发生,但在某个时候ldconfig工具会被执行.

  1. ldconfig完成并为标准系统共享库目录中的所有共享库创建所有所需的符号链接。在本例中,它将创建以下符号链接:

代码语言:javascript
复制
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),但这将是一个单独的问题。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70552547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档