【问题标题】:How to link ws2_32 in Clion如何在 Clion 中链接 ws2_32
【发布时间】:2016-04-09 17:28:17
【问题描述】:

我正在使用 Clion,它使用 MinGW 和 Cmake。当我尝试使用独立的 asio 库时,我得到了

undefined reference to `WSAStartup@8'
undefined reference to `WSASetLastError@4'
undefined reference to `closesocket@4'
...

我相信我必须链接C:/Windows/System32/ws2_32.dll 库。我尝试添加类似-L C:/Windows/System32 -lws2_32:

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS} -static -lws2_32")

但这并没有帮助。如何修复这些错误?

【问题讨论】:

  • 你不需要 -L C:/Windows/System32 因为 mingw 在它的发行版中已经有了这个库。无论如何,mingw 不能链接到.dlls,只能链接到.as(可能还有.libs)。
  • 我认为问题在于你把-lws2_32 放在了错误的变量中,它一定是在CMAKE_EXE_LINKER_FLAGS 中。
  • @HolyBlackCat 我在哪里可以找到.lib.a 文件?
  • @HolyBlackCat 顺便说一句,我显然在 Windows 机器上
  • 很高兴你解决了这个问题。顺便说一句,lib 会自动添加到库名称中。这就是-llibws2_32 触发错误的原因。例如,-lcat 表示link against libcat.a

标签: c++ cmake mingw boost-asio clion


【解决方案1】:

以下 CMakeLists.txt 编译无错误。只需要 1 行:link_libraries(ws2_32 wsock32)

cmake_minimum_required(VERSION 3.3)
project(server_client)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -s -O3 -I C:/Users/Shiro/Desktop/asio-1.10.6/include")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS} -static")
link_libraries(ws2_32 wsock32)


set(SOURCE_FILES chat_server.cpp)
add_executable(server_client ${SOURCE_FILES})

【讨论】:

    猜你喜欢
    • 2021-07-06
    • 1970-01-01
    • 2021-01-02
    • 2017-04-22
    • 2018-08-04
    • 2018-05-25
    • 2017-11-06
    • 2019-09-05
    • 1970-01-01
    相关资源
    最近更新 更多