如何在CLion中包含ASIO C++?
How include ASIO C++ in CLion?
我使用了不同的选项,但所有这些选项都不起作用:
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)
主.cpp:
#define ASIO_STANDALONE
#include <iostream>
#include "asio.hpp"
int main(){std::cout<<"Hello, World!"<<std::endl;return 0;}
错误:
CMakeFilesClient.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'
CMakeFilesClient.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_minimum_required(VERSION 3.14)
project(Client)
set(CMAKE_CXX_STANDARD 17)
include(FetchContent)
add_executable(${PROJECT_NAME} main.cpp)
主.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:UsersDanilaDocumentsProgrammingC++Clientasio-master/asio/include/asio.hpp:18:0,
from C:UsersDanilaDocumentsProgrammingC++Clientmain.cpp:3:
C:UsersDanilaDocumentsProgrammingC++Clientasio-master/asio/include/asio/associated_allocator.hpp:18:34: fatal error: asio/detail/config.hpp: No such file or directory
compilation terminated.
CMakeFilesClient.dirbuild.make:61: recipe for target 'CMakeFiles/Client.dir/main.cpp.obj' failed
mingw32-make.exe[3]: *** [CMakeFiles/Client.dir/main.cpp.obj] Error 1
我做错了什么?
另外,我尝试通过boost安装并包含asio,但它也不起作用。
第一种方法是有效的。但是在 mingw 的窗口中需要在include_directories(${asio_SOURCE_DIR}/asio/include/)
之后添加link_libraries(ws2_32 wsock32)
. 在 Linux 中需要添加:SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DASIO_STANDALONE -pthread")
.
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 提升 ASIO 无法识别计时器对象
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- boost::asio如何生成多个协同程序,然后加入它们
- 缓慢提升ASIO
- 从 Boost ASIO 获取 epoll 描述符 io_service对象
- 如何在 Boost.Asio 中使用 Zero-copy sendmsg/receive
- C++ Boost::asio串行通信与Arduino无法写入
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- 提升 Asio TCP 服务器 处理多个客户端
- boost::asio UDP 广播客户端仅接收"fast"数据包
- 提升 ASIO - io_service 不要等待连接到线程
- 执行时使用 boost::asio::d eadline_timer 时出错
- Boost.Asio/OpenSSL HTTPS GET certificate trouble
- C++ boost::asio::ip::tcp::acceptor 有时不接受连接器?
- boost::asio data owning `ConstBufferSequence`
- 如何替换此示例代码片段中已弃用的handler_type_t或 boost::asio::handler_type?
- 将 boost 序列化对象的 asio::streambuf 表示转换为 Beast 的 DynamicBody req.body()
- 如何将boost::asio::d eadline_timer 与Qt一起使用?