【问题标题】:Can't build boost on linux with bz2 support无法在支持 bz2 的 linux 上构建 boost
【发布时间】:2018-03-29 13:39:07
【问题描述】:

下载 boost 1.66,解压缩,启动引导程序:

Bootstrapping is done. To build, run:
    ./b2

b2 报告:

...blablabla..
- zlib                     : yes (cached)
- bzip2                    : yes (cached)
...blablabla..
The following directory should be added to linker library paths:
    /home/steve/boost_1_66_0/stage/lib
...blablabla..

构建过程中没有错误,只有警告。我正在查看 /home/steve/boost_1_66_0/stage/lib,但没有名称中带有 bz 的文件。在 Windows 预构建的二进制文件上,我有:

boost_bzip2-vc140-mt-gd-x64-1_66.dll
boost_bzip2-vc140-mt-gd-x64-1_66.lib
boost_bzip2-vc140-mt-x64-1_66.dll
boost_bzip2-vc140-mt-x64-1_66.lib

因此,由于缺少 bz2 依赖项,我的项目在 Windows 上构建良好,但在 Linux 上失败。有什么想法吗?

我的 linux 是 ubuntu 14。

谢谢。

【问题讨论】:

    标签: c++ boost bz2


    【解决方案1】:

    有什么想法吗?

    是的。你在找鬼。在linux上,libzlibbz2是默认打包的版本:

    cd custom/boost_1.66.0/
    ldd ldd stage/lib/libboost_iostreams.so.1.66.0 
    

    打印

    linux-vdso.so.1 => (0x00007fffe9708000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fc3399af000)
    libbz2.so.1.0 => /lib/x86_64-linux-gnu/libbz2.so.1.0 (0x00007fc33979f000)
    liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007fc33957d000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fc3391f5000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fc338fde000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc338dc1000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc3389f7000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc3387f3000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc3384ea000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fc339de5000)

    该库是您可以找到的“libbz2-1.0”包的一部分

    dpkg --search /lib/x86_64-linux-gnu/libbz2.so.1.0
    libbz2-1.0:amd64: /lib/x86_64-linux-gnu/libbz2.so.1.0
    

    因此,如果您想使用 bzip2 支持构建 boost,请确保您安装了开发包:

    sudo apt install libbz2-dev 
    

    事实上,我经常“懒惰”,只是从发行版 boost 包中安装依赖项:

    sudo apt build-dep libboost-all-dev
    

    看起来您已经涵盖了该部分,因此您正在寻找不存在的“额外库”。

    【讨论】:

      【解决方案2】:

      好的,我发现在 Linux 和 Windows 上,您需要不同的库才能使 bz2 流运行。我正在使用 cmake,这就是我解决它的方法:

      if (MSVC)
          find_package(Boost COMPONENTS system filesystem bzip2 REQUIRED)
      endif()
      if(LINUX)
          find_package(Boost COMPONENTS system filesystem iostreams REQUIRED)
      endif()
      

      否则链接器在 Windows 和 Linux 上都会产生错误。

      【讨论】:

      • 您的回答没有回答您的问题。我的意思是,您问我们的是您认为是问题的原因,而不是实际问题。考虑将这两个问题分开,在此处接受另一个答案,然后针对项目设置问题编写单独的问题+答案。
      猜你喜欢
      • 2018-12-11
      • 2019-12-07
      • 2011-05-30
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多