Boost 链接问题 - 多个版本

Posted

技术标签:

【中文标题】Boost 链接问题 - 多个版本【英文标题】:Boost Linking Issues - Multiple Versions 【发布时间】: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 的包含文件。

【问题讨论】:

Using boost in MATLAB MEX library, different from MATLAB's version的可能重复 【参考方案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。

以上是关于Boost 链接问题 - 多个版本的主要内容,如果未能解决你的问题,请参考以下文章

当 read_json 在多个线程中使用而不与 boost.thread 库链接时,我们是不是可以始终使用 BOOST_SPIRIT_THREADSAFE 标志?

Boost Python,Visual Studio链接到错误的boost dll

在 cmake 配置后的链接阶段不尊重 BOOST_ROOT

我可以将多个BOOST单元测试链接到一个测试二进制文件中吗?

链接时ssl版本冲突

boost编译中的细节问题