【问题标题】:Boost Linking Issues - Multiple VersionsBoost 链接问题 - 多个版本
【发布时间】:2016-04-21 23:16:08
【问题描述】:

我正在编写一个必须读取二进制 .MAT 文件的 C++ 应用程序。所以我需要使用 libmat 和 libmex 来做到这一点(注意我没有使用 MEX 文件)。我还尝试使用 boost::program_options 来处理解析命令行参数,因为这是一个非 GUI 应用程序。我正在使用 CMake 来处理我的构建环境。

我们正在使用的 boost 版本是 1.59。但是,当我尝试链接 program_options 时,CMake 会在 MATLAB 库中找到 boost::program_options 库,而 MATLAB 库需要 boost 1.49。然后,当我尝试运行已编译的应用程序时,它会因为使用 1.59 的头文件而崩溃,但使用 MATLAB 的 1.49 副本中的库。有没有人知道如何使用这两个版本的 boost,因为 MATLAB 不适用于 1.59 并且 MATLAB 不包含 1.49 的包含文件。

【问题讨论】:

标签: c++ matlab boost


【解决方案1】:

如果您的应用程序崩溃,则遗憾的是 1.49 和 1.59 不兼容二进制,因此唯一可行的方法是强制您的应用程序使用 1.59。可能有两种选择:

  • 强制 CMake 使用 1.59 库,方法是将 BOOST_LIBRARYDIR 变体设置为 CMake。
  • 通过另外设置Boost_USE_STATIC_LIBS,强制 CMake 使用 1.59 库及其静态版本。

我实际上并没有使用 CMake,而且 FindBoost.cmake 似乎并不总是最新的,所以我不能 100% 确定静态选项是否有效,但请尝试一下。

【讨论】:

  • 看起来如果我们使用名称中的版本号构建 'boost' 可以工作,但不幸的是 program_options 和 libmat 必须调用相同的例程并且它们相互冲突。如果他们没有调用相同的例程,那么看起来我可以混合不同版本的 boost 并使其工作。我最终使用了 The Lean Mean C++ Option Parser。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-30
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
相关资源
最近更新 更多