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

VSCode中用MinGW与CodeRunner时collect2.exe错误的解决方法

解决MinGW编译Winsock代码时的未定义引用问题

问题原因

WSAStartup、htons这类Winsock函数属于Windows系统的socket库,MinGW编译时不会自动链接该库,导致链接器找不到函数实现,抛出collect2.exe: error: ld returned 1 exit status错误。

解决方法

  1. 修改编译命令
    在gcc编译命令末尾添加-lws2_32参数,指定链接Winsock库。修改后的完整命令:
    cd "c:\Users\gseid\Documents\.vscode\" && gcc openbcisocket.c -o openbcisocket -lws2_32 && "c:\Users\gseid\Documents\.vscode\"openbcisocket

  2. 配置CodeRunner自动添加链接参数
    避免每次手动修改命令,直接配置CodeRunner的C语言执行模板:

  • 打开VSCode设置,搜索「Code-runner: Executor Map」
  • 找到C语言对应的配置项,将原有命令替换为:
    "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt -lws2_32 && $dir$fileNameWithoutExt"
  1. 代码层面的必要检查
    确保代码中正确引入Winsock头文件并完成初始化:
#include <winsock2.h>
#include <ws2tcpip.h>

int main() {
    WSADATA wsaData;
    // 初始化Winsock 2.2版本
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
        return 1;
    }

    // 你的UDP服务器逻辑代码...

    // 释放Winsock资源
    WSACleanup();
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 17:25:04