无法通过bz2支持在Linux上构建增强功能

时间:2018-03-29 13:39:08

标签: c++ boost bz2

下载了boost 1.66,解压缩,启动bootstrap:

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

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

我的linux是ubuntu 14。

感谢名单。

2 个答案:

答案 0 :(得分:2)

  

有什么想法吗?

烨。你在寻找鬼魂。在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,请确保安装了开发pacakage:

sudo apt install libbz2-dev 

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

sudo apt build-dep libboost-all-dev

看起来你已经覆盖了那部分,所以你正在寻找不存在的“额外库”。

答案 1 :(得分:0)

好的,我发现在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上产生错误。