【问题标题】:linking boost filesystem and boost iostream libraries in ubuntu 14.04在 ubuntu 14.04 中链接 boost 文件系统和 boost iostream 库
【发布时间】:2016-09-17 04:17:37
【问题描述】:

我下载了 boost 1.61 并将其提取到 /usr/local/boost_1_61_0 并在安装时将前缀路径设置为 /usr/local/ ,其中安装了所有 boost 库。我正在尝试安装使用 Boost c++ 库(从https://github.com/hubsw/FRESCO 下载)构建的用于 DNA 数据压缩的 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 和文件系统相关的内容。

在 FRESCO 中,他们提到他们需要 BOOST 1.51(更高版本)、boost filesystem、boost iostream、boost threading-mt。

有人可以建议我哪里出错了吗?如果我使用 ubuntu 的 make 实用程序安装 FRESCO 工具,如何链接 boost 文件系统/iostream?

【问题讨论】:

  • 尝试将-L/path/to/boost/libs -lboost_filesystem -lboost_system -lboost-iostreams 添加到编译标志。相关:stackoverflow.com/q/17950840/3093378
  • 我尝试使用命令“make -I/usr/local/boost_1_61_0/libs -lboost_filesystem -lboost_system -lboost-iostreams”,但得到了同样的错误。 Path/to/boost/libs 是我们在使用 "./b2 install prefix=" 安装 boost 时提取 Boost 或前缀中提到的路径的路径
  • 当我使用 -L 时,我得到“无效选项”作为错误。我认为 -L 用于最新的 mtime betn 符号链接和目标。所以我尝试了 -I 选项。
  • @Sumit 你不能像这样将标志添加到make 命令行。您必须修改Makefile
  • 好的。当我看到带有选项的 make 手册页时,我感到很困惑。我尝试修改makefile并添加了“-L/path/to/boost/libs -lboost_filesystem -lboost_system -lboost-iostreams”,在那里我找到了在makefile中编译主文件的命令,但我仍然遇到同样的错误。您能否建议我的 boost 安装和链接 @mindriot 有什么问题?

标签: c++ ubuntu boost boost-thread dna-sequence


【解决方案1】:

我正在尝试将 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 进行编译,对于 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):

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多