2016-04-21 10 views
0

Ich schreibe eine C++ - Anwendung, die eine binäre .MAT-Datei lesen muss. Also muss ich libmat und libmex dazu verwenden (beachten Sie, dass ich keine MEX-Dateien verwende). Ich versuche auch boost::program_options zu verwenden, um Befehlszeilenargumente zu analysieren, da dies eine Nicht-GUI-Anwendung ist. Ich verwende CMake, um mit meiner Build-Umgebung umzugehen.Boost Linking Probleme - Mehrere Versionen

Die Version von Boost, mit der wir arbeiten, ist 1.59. Wenn ich jedoch versuche, in program_options zu verknüpfen, findet CMake die boost::program_options-Bibliothek mit den MATLAB-Bibliotheken und die MATLAB-Bibliotheken benötigen Boost 1.49. Wenn ich dann versuche, die kompilierte Anwendung auszuführen, stürzt es ab, weil Header von 1.59 verwendet werden, aber die Bibliotheken von MATLABs Kopien von 1.49. Hat jemand irgendwelche Ideen, wie ich die zwei Versionen von Boost verwenden kann, da MATLAB nicht mit 1.59 arbeitet und MATLAB die Include-Dateien für 1.49 nicht enthält.

Antwort

0

Wenn Ihre Anwendung abstürzt, bedeutet das leider, dass 1,49 und 1,59 nicht binärkompatibel sind. Das kann nur funktionieren, wenn Sie Ihre Anwendung zwingen, 1.59 zu verwenden. Möglicherweise gibt es zwei Optionen:

  • Erzwingen Sie CMake, 1.59 Bibliotheken zu verwenden, indem Sie BOOST_LIBRARYDIR Variante zu CMake festlegen.
  • Erzwingen Sie CMake, 1.59 Bibliotheken und statische Versionen von ihnen zu verwenden, indem Sie zusätzlich Boost_USE_STATIC_LIBS festlegen.
  • Ich benutze nicht wirklich CMake, und FindBoost.cmake scheint nicht immer auf dem neuesten Stand zu sein, also bin ich nicht 100% sicher, dass die statische Option funktioniert, aber versuchen Sie es.

    +0

    Es sieht so aus, als ob wir 'boost' mit seinen Versionsnummern im Namen erstellen, das könnte funktionieren, aber unglücklicherweise müssen programm_options und libmat die gleiche Routine aufrufen und sie stehen miteinander in Konflikt. Wenn sie nicht die gleichen Routinen aufrufen, dann sieht es so aus, als könnte ich Boost-Versionen mischen und zum Laufen bringen. Ich habe den Lean Mean C++ - Optionsparser verwendet. – Todd

    Verwandte Themen