2017-03-31 3 views
0

Ich nähere mich dieser Reihe von Bibliotheken, weil ich ein persönliches Projekt für meine Universitätsprüfung erstellen muss und ich möchte etwas mit Netzwerkfunktionen machen. Ich habe bereits ein Buch über diese spezielle Bibliothek, aber jetzt kann ich das nicht in meinem Projekt verlinken (mein Buch erklärt nur, wie man es unter Linux mit GCC verbindet, aber ich nehme CLion mit MinGW unter Windows 10). Wenn ich ein einfaches leeres Projekt wie folgt zusammenstellen:Static_initialization_and_distriction Fehler beim Verknüpfen von Boost.Asio in CLion

#include <boost/asio.h> 

int main (int argc, char ** argv) { 

    return 0; 
} 

ich diese eindrucksvollen Fehler:

CMakeFiles\Hello.dir/objects.a(main.cpp.obj): In function `_static_initialization_and_destruction_0': 
    C:/boost_1_63_0/boost/system/error_code.hpp:221: undefined reference to `boost::system::generic_category()' 
    C:/boost_1_63_0/boost/system/error_code.hpp:222: undefined reference to `boost::system::generic_category()' 
    C:/boost_1_63_0/boost/system/error_code.hpp:223: undefined reference to `boost::system::system_category()' 
    CMakeFiles\Hello.dir/objects.a(main.cpp.obj): In function `ZN5boost4asio5error19get_system_categoryEv': 
    C:/boost_1_63_0/boost/asio/error.hpp:230: undefined reference to `boost::system::system_category()' 
    CMakeFiles\Hello.dir/objects.a(main.cpp.obj): In function `ZN5boost4asio6detail17winsock_init_base7startupERNS2_4dataEhh': 
    C:/boost_1_63_0/boost/asio/detail/impl/winsock_init.ipp:39: undefined reference to `[email protected]' 
    CMakeFiles\Hello.dir/objects.a(main.cpp.obj): In function `ZN5boost4asio6detail17winsock_init_base7cleanupERNS2_4dataE': 
    C:/boost_1_63_0/boost/asio/detail/impl/winsock_init.ipp:56: undefined  reference to `[email protected]' 
    collect2.exe: error: ld returned 1 exit status 
    CMakeFiles\Hello.dir\build.make:96: recipe for target 'Hello.exe' failed 
    CMakeFiles\Makefile2:66: recipe for target 'CMakeFiles/Hello.dir/all' failed 
    mingw32-make.exe[3]: *** [Hello.exe] Error 1 
    mingw32-make.exe[2]: *** [CMakeFiles/Hello.dir/all] Error 2 
    mingw32-make.exe[1]: *** [CMakeFiles/Hello.dir/rule] Error 2 
    CMakeFiles\Makefile2:78: recipe for target 'CMakeFiles/Hello.dir/rule' failed 
    mingw32-make.exe: *** [Hello] Error 2 
    Makefile:117: recipe for target 'Hello' failed 

Hier ist mein CMakeLists.txt

cmake_minimum_required(VERSION 3.6) 
    project(Hello) 


    set(CMAKE_CXX_STANDARD 14) 

    set(SRC_FILES main.cpp) 
    include_directories(C:\\boost_1_63_0) 
    link_directories(C:\\boost_1_63_0) 

    find_package(BOOST 1.63.0 REQUIRED) 

    add_executable(Hello ${SRC_FILES}) 

Wie kann ich dieses Problem lösen? Vielen Dank im Voraus!

EDIT

ich meine CMakeLists.txt aktualisiert, wie es folgt:

cmake_minimum_required(VERSION 3.8.0) 
project(Hello) 


set(CMAKE_CXX_STANDARD 14) 

set(SRC_FILES main.cpp) 

set(BOOST_ROOT C:\\boost_1_63_0) 
find_package(Boost 1.63.0 COMPONENTS system REQUIRED) 
find_library(WS2_32_LIBRARY ws2_32) 

link_directories(C:\\boost_1_63_0) 
link_libraries(${BOOST_LIBRARIES}) 

add_executable(Hello ${SRC_FILES}) 
target_link_libraries(Hello ${WS2_32_LIBRARY} ${BOOST_LIBRARIES}) 

Und jetzt bekomme ich keine Fehler, trotzdem, wenn ich mein Programm sagen:

#include <boost/asio.hpp> 

der Boost wird rot und der statische Analysator sagt mir "Kann Boost nicht finden". Wo ist das Problem jetzt? Danke!

Antwort

0

Sie mit Boost.System verbinden sollte und Winsock, so etwas zu Ihrem CMakeLists.txt hinzufügen:

find_package(Boost COMPONENTS system REQUIRED) 
find_library(WS2_32_LIBRARY ws2_32) 
target_link_libraries(Hello ${WS2_32_LIBRARY} ${Boost_SYSTEM_LIBRARY}) 
+0

@Baffo rasta IUUC, jetzt Ihr Programm kompiliert und ausgeführt, aber Ihre IDE erkennt nicht das enthalten? Ich glaube, Sie sollten die IDE konfigurieren und sagen, wo sich die Header-Dateien befinden. Wenn Sie Hilfe benötigen, posten Sie bitte eine andere Frage und markieren Sie sie richtig. –

+0

Nein, mein Programm kompiliert nicht, es steht auf Build "Konnte Boost nicht finden". Anyway CMake Debug sagt mir, es könnte sowohl Boost 1.63.0 und boost :: system finden ... –

+0

@Baffo rasta Vielleicht haben Sie Boost für Mingw nicht gebaut, oder? –

Verwandte Themen