2016-08-03 23 views
0

Ich habe versucht, Boost 1.61.0 zu importieren (heruntergeladen von SourceForge - Boost 1.61.0 als .7z), aber fehlgeschlagen.Fehler beim Importieren von Boost 1.61.0 in C++ - Projekt

Console:

"D:\Program Files (x86)\JetBrains\CLion 2016.2\bin\cmake\bin\cmake.exe" --build C:\Users\Marczak\.CLion2016.2\system\cmake\generated\WsServer-e351c9f9\e351c9f9\Debug --target WsServer -- -j 4 
[ 50%] Linking CXX executable WsServer.exe 
CMakeFiles\WsServer.dir\build.make:96: recipe for target 'WsServer.exe' failed 
CMakeFiles\Makefile2:66: recipe for target 'CMakeFiles/WsServer.dir/all' failed 
CMakeFiles\WsServer.dir/objects.a(main.cpp.obj): In function `_static_initialization_and_destruction_0': 
C:/Users/Marczak/boost_1_61_0/boost/system/error_code.hpp:221: undefined reference to `boost::system::generic_category()' 
C:/Users/Marczak/boost_1_61_0/boost/system/error_code.hpp:222: undefined reference to `boost::system::generic_category()' 
C:/Users/Marczak/boost_1_61_0/boost/system/error_code.hpp:223: undefined reference to `boost::system::system_category()' 
collect2.exe: error: ld returned 1 exit status 
mingw32-make.exe[3]: *** [WsServer.exe] Error 1 
mingw32-make.exe[2]: *** [CMakeFiles/WsServer.dir/all] Error 2 
mingw32-make.exe[1]: *** [CMakeFiles/WsServer.dir/rule] Error 2 
CMakeFiles\Makefile2:78: recipe for target 'CMakeFiles/WsServer.dir/rule' failed 
mingw32-make.exe: *** [WsServer] Error 2 
Makefile:117: recipe for target 'WsServer' failed 

CMakeLists.txt:

cmake_minimum_required(VERSION 3.5) 
project(WsServer) 

set(BOOST_ROOT "C:/Users/Marczak/boost_1_61_0") 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") 

set(SOURCE_FILES src/main.cpp) 

find_package(Boost) 
include_directories(${Boost_INCLUDE_DIRS}) 
add_executable(WsServer ${SOURCE_FILES}) 

Wenn ich find_package(Boost 1.61.0 COMPONENTS system filesystem REQUIRED) bekomme ich:

Error: Unable to find the requested Boost libraries. 
Boost version: 1.61.0 
Boost include path: C:/Users/Marczak/boost_1_61_0 
Could not find the following static Boost libraries: 
     boost_system   boost_filesystem 
No Boost libraries were found. You may need to set BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT to the location of Boost. 

Ich versuchte Boost_USE_STATIC_LIBRARIES auf zu setzen, aber es scheiterte auch. Ich benutze CLion 2016.2.

UPDATE: Ich versuchte auch ältere Versionen. Derselbe Fehler. Was ist in der .7z:

.7z file

In anderen Themen, die ich sehe lib Ordner. Aber hier sehe ich es nicht. Was sollte ich in BOOST_LIBRARYDIR setzen?

UPDATE 2: Installierte Binärdatei von https://sourceforge.net/projects/boost/files/boost-binaries/1.61.0/. Ich habe bemerkt, dass es einen neuen Ordner gibt: lib64-msvc-14.0. Es enthält viele .dll- und .lib-Dateien, z. boost_atomic-vc140-mt-1_61.dll.

Boost.org sagt:

Wenn Sie Ihre Werkzeuge aus der Windows-Eingabeaufforderung verwenden, können Sie an der richtigen Stelle sind. Wenn Sie vorhaben, aus der Cygwin-Bash-Shell zu erstellen, laufen Sie tatsächlich auf einer POSIX-Plattform und sollten den Anweisungen für den Einstieg in Unix-Varianten folgen. Andere Befehls-Shells, wie MSYS, von MinGW, werden nicht unterstützt. Sie können funktionieren oder nicht.

Ich werde versuchen, mit Cygwin.

+0

Haben Sie Boost mit dem Compiler kompiliert, den Sie hier verwenden? Klingt so, als hättest du gerade den Quellcode unter 'C:/Users/Marczak/boost_1_61_0' extrahiert. – drescherjm

+0

@drescherjm Nein. Ich bin neu in C++. Wie kompiliere ich es? –

+0

Vielleicht wäre ein Boost-Binär-Download für Mingw besser für Sie. Ich bin mir nicht sicher, was der Compiler/Toolkit 'CLion' unter Windows benutzt. Ist es mingw/gcc ?? – drescherjm

Antwort

1

Wenn Sie neu in C++ sind, empfehle ich Ihnen, MinGW Verteilung von Stephan T. Lavavej (Microsoft C++ Entwickler): https://nuwen.net/mingw.html. Es enthält neben anderen Tools und Bibliotheken vordefinierte Boost-Binärdateien. Entpacken Sie es und geben Sie den Pfad dazu über Settings | Build, Execution, Deployment | Toolchains an.

Danach sollten Sie in der Lage sein, das Programm mit den folgenden CMakeLists.txt zu kompilieren:

cmake_minimum_required(VERSION 3.5) 
project(WsServer) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") 

set(SOURCE_FILES src/main.cpp) 

find_package(Boost REQUIRED COMPONENTS filesystem) 
include_directories(${Boost_INCLUDE_DIRS}) 
add_executable(WsServer ${SOURCE_FILES}) 
target_link_libraries(WsServer ${Boost_LIBRARIES}) 

nicht CMake Cache als find_packages nicht aktualisiert erfolgreiche Ergebnisse aus Performance-Gründen (in CLION fallen vergessen kann über Cmake toolbar | Cache | red arrows icon durchgeführt werden).

Einige zusätzliche Bemerkungen:

  • Boost_USE_STATIC_LIBRARIES manuell nicht dazu gedacht, eingestellt werden, ist es durch Ausführen find_package(Boost) eingestellt, die BOOST_ROOT oder BOOST_INCLUDEDIR + BOOST_LIBRARYDIR verwendet, sollten Sie diejenigen, bei Bedarf eingestellt. Sie müssen es nicht mit der MinGW-Distribution tun, die ich verlinkt habe, da es Boost-Includes und Bibliotheken an zugänglichen Orten bereits enthält.
  • Sie können überprüfen, ob die Pfade zu Bibliotheken korrekt sind, indem Sie Boost_* Variablen in CMake-Cache betrachten.
  • libs Verzeichnis im Boost-Quellen ist in keinem Zusammenhang mit dem Problem, es hat conitain keine Binärdateien
  • Sie Boost-Binärdateien mit Visual Studio Basiswerkzeugen heruntergeladen hat, nicht MinGW, so dass sie mit dem Setup nicht kompatibel. Wenn Sie das MinGW-Paket, das ich verlinkt habe, nicht verwenden möchten, müssen Sie entweder Boost-Binärdateien finden, die mit der korrekten MinGW-Version erstellt wurden, oder sie selbst erstellen.
+0

Arbeitete! Vielen Dank. –