You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MinGW编译Winsock2 C++代码报undefined reference错误如何解决

报错原因
  1. 代码中写的 #pragma comment(lib, "Ws2_32.lib") 是微软MSVC编译器的专属编译指示,MinGW的g++编译器不支持该语法,无法自动完成winsock库的链接。
  2. 你调整后的编译指令链接顺序错误:gcc的链接器是按照从左到右的顺序解析符号依赖,依赖库必须放在依赖它的源文件/目标文件之后,你将 -lws2_32 放在 proxy.cpp 前面,导致链接器在处理源文件之前就加载了库,无法匹配源文件中未定义的winsock相关符号。
修复方法

1. 修正编译指令

调整 -lws2_32 的位置,放到整个编译指令的最后,示例如下:

g++ -std=c++17 -Wall -Wextra -g "C:\Users\Martin F Lundgren\tdts06_lab\Lab2\proxy.cpp" -o "C:\Users\Martin F Lundgren\tdts06_lab\Lab2\proxy.exe" -lws2_32

如果是使用VSCode的C/C++插件自动构建,需要修改对应的 .vscode/tasks.json 配置,在参数列表的末尾添加 -lws2_32,参考配置片段:

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe 生成活动文件",
            "command": "C:\\msys64\\mingw64\\bin\\g++.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe",
                "-lws2_32"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ],
    "version": "2.0.0"
}

2. 额外代码问题修复

你的代码存在逻辑错误会导致运行异常,可一并修正:

  • recv 函数传参错误:你当前用监听socket server_socket 收数据,应该用accept返回的和浏览器建立连接的web_socket收数据,修改为:
recv(web_socket, browser_message, sizeof(browser_message), 0);
  • is_message 函数判断逻辑不合理:直接判断数组第55位为'G'的误判率极高,建议改为判断请求行首是不是GET请求:
bool is_message(char mess[4096]) {
    // GET请求前四个字符为'G'、'E'、'T'、空格
    return strncmp(mess, "GET ", 4) == 0;
}

内容的提问来源于stack exchange,提问作者Martin F Lundgren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:39:01