Как включить ASIO C ++ в CLion? - PullRequest
1 голос
/ 13 октября 2019

Я использовал разные опции, но все они не работали:

1) CMake:

cmake_minimum_required(VERSION 3.14)
project(Client)

set(CMAKE_CXX_STANDARD 17)

include(FetchContent)

FetchContent_Declare(
        asio
        GIT_REPOSITORY https://github.com/chriskohlhoff/asio
        GIT_TAG asio-1-14-0
        UPDATE_DISCONNECTED 1
)

FetchContent_Populate(asio)
include_directories(${asio_SOURCE_DIR}/asio/include/)

add_executable(${PROJECT_NAME} main.cpp)

main.cpp:

#define  ASIO_STANDALONE
#include <iostream>
#include "asio.hpp"

int main(){std::cout<<"Hello, World!"<<std::endl;return 0;}

Ошибка:

CMakeFiles\Client.dir/objects.a(main.cpp.obj): In function `ZN4asio6detail17winsock_init_base7startupERNS1_4dataEhh':
C:/Users/Danila/Documents/Programming/C++/Client/cmake-build-debug/_deps/asio-src/asio/include/asio/detail/impl/winsock_init.ipp:38: undefined reference to `_imp__WSAStartup@8'
CMakeFiles\Client.dir/objects.a(main.cpp.obj): In function `ZN4asio6detail17winsock_init_base7cleanupERNS1_4dataE':
C:/Users/Danila/Documents/Programming/C++/Client/cmake-build-debug/_deps/asio-src/asio/include/asio/detail/impl/winsock_init.ipp:55: undefined reference to `_imp__WSACleanup@0'
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[3]: *** [Client.exe] Error 1

2) Загрузить ASIO в проекте.

CMake:

cmake_minimum_required(VERSION 3.14)
project(Client)

set(CMAKE_CXX_STANDARD 17)

include(FetchContent)

add_executable(${PROJECT_NAME} main.cpp)

main.cpp

#define  ASIO_STANDALONE
#include <iostream>
#include "asio-master/asio/include/asio.hpp"

int main(){std::cout<<"Hello, World!"<<std::endl;return 0;}

Ошибка:

In file included from C:\Users\Danila\Documents\Programming\C++\Client\asio-master/asio/include/asio.hpp:18:0,
                     from C:\Users\Danila\Documents\Programming\C++\Client\main.cpp:3:
    C:\Users\Danila\Documents\Programming\C++\Client\asio-master/asio/include/asio/associated_allocator.hpp:18:34: fatal error: asio/detail/config.hpp: No such file or directory
    compilation terminated.
    CMakeFiles\Client.dir\build.make:61: recipe for target 'CMakeFiles/Client.dir/main.cpp.obj' failed
    mingw32-make.exe[3]: *** [CMakeFiles/Client.dir/main.cpp.obj] Error 1

Что я делаю не так?

Также я попытался установить и включить asio с помощью boost, но он тоже не работает.

1 Ответ

1 голос
/ 13 октября 2019

Первый метод работает. Но в windows для mingw нужно добавить link_libraries(ws2_32 wsock32) после include_directories(${asio_SOURCE_DIR}/asio/include/). В Linux нужно добавить: SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DASIO_STANDALONE -pthread").

...