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