我下载了boost 1.61并将其解压缩到/ usr / local / boost_1_61_0,安装时我将前缀路径设置为/ usr / local /,其中安装了所有的boost库。我正在尝试安装用于DNA数据压缩的FRESCO工具,该工具是使用Boost c ++库构建的(从https://github.com/hubsw/FRESCO下载)。他们已经提供了make实用程序来安装FRESCO工具。
但是当我尝试运行make时,我收到有关BOOST:FILESYSTEM和BOOST:IOSTREAM库的错误,如下所示
undefined reference to `boost::iostreams::detail::gzip_header::reset()'
undefined reference to boost::iostreams::detail::zlib_base::~zlib_base()'
undefined reference to `boost::filesystem::detail::create_directories(boost::filesystem::path const&, boost::system::error_code*)'
以及更多与boost iostream和filesystem相关的内容。
在FRESCO中,他们提到他们需要BOOST 1.51(稍后),增强文件系统,增强iostream,增强线程功能。
有人可以建议我哪里出错吗?如果我使用ubuntu的make实用程序安装FRESCO工具,如何链接boost文件系统/ iostream?
答案 0 :(得分:0)
我正在尝试将boost编译为项目的依赖项,并且遇到类似的错误。
对于您的情况,我看到两个问题:
我不使用FRESCO,但是从其makefile中我看到-lboost_system -lboost_filesystem -lboost_iostreams
,因此它期望全局安装Boost。您无需为此编译Boost,可以使用系统的打包版本。在ubuntu中,它们可以与sudo apt-get install libboost-dev libboost-filesystem-dev libboost-iostreams-dev
一起安装。
如果您确实要编译Boost,则该错误消息是关于boost的一部分,需要对其进行额外配置(压缩过滤器)。它尝试链接到具有一些默认情况下未编译的定义的对象(如果FRESCO不使用压缩过滤器,则可能会正确链接)。假设您正在使用Boost.Build for Boost.Iostreams进行编译,此问题在https://www.boost.org/doc/libs/1_61_0/libs/iostreams/doc/installation.html中进行了解释(不是很好的IMO):
要使用Boost.Build进行构建,请从目录libs / iostreams / build或Boost根目录运行bjam。如果要使用压缩过滤器,则可能需要设置几个Boost.Build变量,这些变量指示源文件或预构建二进制文件的位置。
还有其他替代方法可以编译Boost.Iostreams:
如果您已在系统中安装了bzip和zlib,Boost.Build将自动配置这些压缩过滤器的编译。在ubuntu中,执行sudo apt-get install libbz2-dev zlib1g-dev
(在xenial中,我没有检查其他版本中的名称是否不同)。
如果您无法在系统中安装zlib和libbgzip ,并且自己进行了编译,请将其放入boost:下载的文件夹中的文件tools/build/src/user-config.jam
中:
using zlib : 1.2.11 : <include>/path-to-your-compilation/zlib-1.2.11 <search>/path-to-your-compilation/zlib-1.2.11 ;
using bzip2 : 1.0.6 : <include>/path-to-your-compilation/bzip2-1.0.6 <search>/path-to-your-compilation/bzip2-1.0.6 ;
只需替换path-to-your-compilation
。
然后,执行./bootstrap.sh --with-libraries=filesystem,iostreams
和./b2
。
有关此文档(请注意,我正在使用Boost 1.65):