Ошибка Static_initialization_and_distruction при связывании Boost.Asio в CLion

Я подхожу к этому набору библиотек, потому что мне нужно создать личный проект для экзамена в университете, и я хотел бы сделать что-то с сетевыми функциями. Я уже получил книгу об этой конкретной библиотеке, но теперь я не могу связать это в своем проекте (моя книга объясняет только, как связать ее на Linux с GCC, но я объединяю CLion с MinGW на Windows 10).
Когда я компилирую простой пустой проект, как это:

#include <boost/asio.h>

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

return 0;
}

Я получаю эту впечатляющую ошибку:

   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 `WSAStartup@8'
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 `WSACleanup@0'
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

Вот мой 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})

Как я могу решить это?
Заранее спасибо!

РЕДАКТИРОВАТЬ

Я обновил свой CMakeLists.txt следующим образом:

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})

И теперь я не получаю никакой ошибки, во всяком случае, когда я говорю своей программе:

#include <boost/asio.hpp>

усиление становится красным, и статический анализатор говорит мне «Не удается найти усиление».
Где проблема сейчас?
Спасибо!

0

Решение

Вы должны связаться с Boost.System а также Winsockтак что добавьте что-то подобное в ваш CMakeLists.txt:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]