2016-12-23 7 views
-2

Ich versuche, von Linux auf Windows-Umgebung zu wechseln, aber finde es einen sehr harten Weg.Kompilieren boost :: asio Beispiel unter Windows

Dieses Mal wollte ich testen, ob ich mit Boost-Bibliothek arbeiten kann.

Ich hatte Probleme mit der Kompilierung Boost auf Windows, also habe ich vorkompilierte Version heruntergeladen. Ich habe alles ausgepackt und positiv getestet, dass ich die Header-Only-Librariers kompilieren kann.

Dann kopierte ich ein paar einfache boost :: asio Beispiel. Ich habe alles in Eclipse eingerichtet. Die Kompilierung lief gut, aber während des Linkens bekam ich ein 'undefiniertes Referenz' Problem zu 'boost :: system' internen Sachen.

C:/Users/jacek/cpp/boost_1_62_0/boost/system/error_code.hpp:221: undefined reference to `boost::system::generic_category()' 
C:/Users/jacek/cpp/boost_1_62_0/boost/system/error_code.hpp:222: undefined reference to `boost::system::generic_category()' 
C:/Users/jacek/cpp/boost_1_62_0/boost/system/error_code.hpp:223: undefined reference to `boost::system::system_category()' 

So habe ich ‚-lboost_system‘, sowie den Pfad zu dem Verzeichnis-Bibliotheken, um meine Verknüpfungsoptionen. Aber das hat nicht geholfen.

g++ "-LC:\\Users\\jacek\\cpp\\boost_1_62_0\\lib64-msvc-14.0" -o TestAsio.exe "src\\Main.o" -lboost_system 

Ich überprüfte das Bibliotheksverzeichnis und fand dort eine Reihe von Dateien mit 'boost_system' im Namen. Sie sind:

  • libboost_system-vc140-mt-1_62.lib
  • libboost_system-vc140-mt-gd-1_62.lib
  • libboost_system-vc140-mt-s-1_62.lib
  • libboost_system -vc140-mt-sgd-1_62.lib
  • libboost_system-vc140-s-1_62.lib
  • libboost_system-vc140-sgd-1_62.lib

Ich wusste nicht, was ich verwenden sollte. Ich habe versucht, 'libboost_system-vc140-mt-1_62' zu den Verknüpfungsoptionen hinzuzufügen, ich habe alle anderen Dateien ausprobiert, ich habe versucht, die Dateien in das Linux-Muster 'libboost_system.a' umzubenennen, aber nichts hat funktioniert.

g++ "-LC:\\Users\\jacek\\cpp\\boost_1_62_0\\lib64-msvc-14.0" -o TestAsio.exe "src\\Main.o" -llibboost_system-vc140-mt-1_62 -llibboost_system-vc140-mt-gd-1_62 -llibboost_system-vc140-mt-s-1_62 -llibboost_system-vc140-mt-sgd-1_62 -llibboost_system-vc140-s-1_62 -llibboost_system-vc140-sgd-1_62 

Was mache ich hier falsch? Bitte helfen ... YotKay

+1

"-LLC: \\ sieht seltsam aus, -L" C: \\? – willll

+0

Ich denke, ich fand hier eine Lösung: http://boost.org/more/getting_started/windows.html – YotKay

+2

Der Punkt ist, dass die vorkompilierten Binärdateien mit Visual Studio kompiliert wurden und sie sind nicht kompatibel mit G ++. Scheisse! – YotKay

Antwort

0

ich es gelöst mich mit Hilfe eines Kommentars von diesem Posten: boost asio example compilation error

Es sieht aus wie die vorkompilierte Version von Boost-Visual Studion erstellt und ist mit G UNVEREINBAR ++ . Wenn ich mich entscheide, MinGW zu installieren, kann ich die vorkompilierte Boost-Version nicht verwenden, sondern muss sie selbst mit g ++ kompilieren.

Ich habe das getan. Jetzt habe ich Bibliotheken mit G ++ kompiliert.

Ich gebe den Pfad zur Boost-System-Bibliothek wie folgt an: c: \ Benutzer \ jacek \ cpp \ boost_1_62_0 \ libraries \ boost \ bin.v2 \ libs \ system \ build \ gcc-mingw-6.2.0 \ Debug \ link statische \

und fügen Sie diese Option: -lboost_system-mgw62-d-1_62

Jetzt ist das Problem mit boost :: System verschwindet. Allerdings erscheint ein weiterer mit Boost Asio, aber zum Glück ist die Antwort hier: MinGW linker error: winsock

Das Beispiel funktioniert jetzt gut auf meinem Windows 10 Laptop.

#include <boost/asio/io_service.hpp> 
#include <boost/asio/steady_timer.hpp> 
#include <chrono> 
#include <iostream> 

using namespace boost::asio; 

int main() 
{ 
    io_service ioservice; 

    steady_timer timer{ioservice, std::chrono::seconds{3}}; 
    timer.async_wait([](const boost::system::error_code &ec) 
    { std::cout << "3 sec\n"; }); 

    ioservice.run(); 
}