2016-04-21 76 views
0

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

我们正在使用的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的include文件。

回答

0

如果您的应用程序崩溃,这意味着可悲1.49和1.59不是二进制兼容的,所以这可以工作的唯一方法是,您强制您的应用程序使用1.59。可能有两种选择:

  • 强制CMake使用1.59库,设置BOOST_LIBRARYDIR变体为CMake。
  • 通过另外设置Boost_USE_STATIC_LIBS,强制CMake使用1.59库和它们的静态版本。

我实际上并没有使用CMake,FindBoost.cmake也并不总是最新的,所以我不能100%确定静态选项可以正常工作,但试试看吧。

+0

看起来好像我们在名称中使用它的版本号来构建'boost',这可能会起作用,但不幸的是,program_options和libmat必须调用相同的例程,并且它们相互冲突。如果他们没有调用相同的例程,那么看起来我可以混合boost版本并使其工作。我最终使用了Lean Mean C++ Option Parser。 – Todd