LNK2019 beim Einschließen von Asio-Headern, die mit cmake erzeugt wurden

7

Ich versuche, ein großes Projekt von gcc (Linux) nach msvc (Windows) zu portieren, mit Hilfe von cmake und boost Bibliotheken.

Das Projekt kompiliert und läuft gut für gcc, aber auf msvc gibt es den folgenden Fehler zurück:

%Vor%

Ich habe versucht, ein einfaches Projekt mit boost asio auszuführen, und es hat funktioniert, was Boost-Build-Probleme teethisch ausschließt.

Die CMakeLists.txt ist wie folgt: (getrennt die Teile von Interesse)

%Vor%

Vielen Dank im Voraus

    
Ishida 26.07.2011, 15:36
quelle

4 Antworten

18

Versuchen Sie, das Flag "/ EHsc" in Ihre Variable TPN_WIN32 in cmake einzufügen. Es scheint, dass MSVC keine Ausnahmen auslöst und Sie müssen es in Ihrem vcproj aktivieren.

    
Metariku 27.07.2011, 16:21
quelle
5

In meinem Fall hat das Flag /EHsc nicht funktioniert. Es stellte sich heraus, dass BOOST_NO_EXCEPTIONS definiert wurde, so dass der Compiler nach der Funktion "benutzerdefiniert" (wie in boost / throw_exception.hpp) suchte.

Daher können Sie Ihre Lieblingsfunktion boost::throw_exception() schreiben:

%Vor%     
fabrica 13.11.2015 11:19
quelle
2

Wenn Sie Windows ausführen, müssen Sie (standardmäßig) auf boost.system und boost.regex

verweisen

Wie es hier heißt:

  

Hinweis Mit MSVC oder Borland C ++ möchten Sie möglicherweise hinzufügen   -DBOOST_DATE_TIME_NO_LIB und -DBOOST_REGEX_NO_LIB zu Ihrem Projekt   Einstellungen, um das Autolinking von Boost.Date_Time und Boost.Regex zu deaktivieren   Bibliotheken jeweils. Alternativ können Sie diese auch erstellen   Bibliotheken und Link zu ihnen.

Wenn Sie keine Verbindung zu anderen Boost-Bibliotheken herstellen möchten, können Sie die identische (nicht Boost) -Asio-Bibliothek von hier .

In Bezug auf Ihre CMakeLists.txt -Datei möchten Sie eine Zeile wie

%Vor%

um die Bibliothek tatsächlich zu verknüpfen.

EDIT: auch, schauen Sie sich How Um mit boake.system mit cmake zu verlinken , könnte es sein, dass Sie die einzelnen Boost-Bibliotheken spezifisch spezifizieren müssen anstatt ${Boost_LIBRARIES}

    
Tom 26.07.2011 15:41
quelle
1

Sieht so aus, als müsste die Binärdatei dieselbe Struktur haben, um die Kompatibilität zu ermöglichen. Die MSVC-Standardbibliotheksimplementierung verwendet die strukturierte Ausnahmebehandlungsoption on. Sieht so aus, dass boost :: system dies auch nutzt. Möglicherweise werden entsprechende Warnmeldungen angezeigt, in denen Sie aufgefordert werden, die Behandlung von Strukturausnahmen hinzuzufügen.

%Vor%     
Sergei 22.07.2017 07:15
quelle