2016-04-21 73 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