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

Windows 11下MinGW环境编译uWebSockets依赖的正确方法

问题描述

项目结构

uwebsockets/   (git-submodule)
  - src
  - uSockets
    - boringssl
      - ...
    - lsquic
      - ...
    - ...
  - examples
    - ...
  - ...
entry.cpp
src/
  - ...
build.sh

当前build.sh内容

/c/mingw64/bin/g++ -Wno-overflow -Wno-narrowing -fwrapv -O3 entry.cpp -Iuwebsockets/src -Iuwebsockets/uSockets/src -L$SEARCH -lzlib -luv -luSockets -o main
# $SEARCH will point to wherever the build output is

需求与约束

在Windows 11 x64环境下(g++位于/mingw64/bin),寻找满足以下条件的最简构建/引入uWebSockets依赖(含子依赖uv、zlib、uSockets)的方法:

  1. 不全局安装库
  2. 仅使用MinGW编译,不安装Visual Studio或其任何组件
  3. 不重构项目使用CMake

已知uWebSockets是头文件库,核心需要构建子依赖;但uWebSockets仓库内的构建资源(build.c、Makefile等)无法正常使用,Makefile在Windows下报错cc: command not found,且找不到预编译二进制文件。


解决方案

1. 配置MinGW环境变量

将/mingw64/bin添加到系统PATH中,后续可直接使用g++、mingw32-make等命令,无需输入完整路径。

2. 构建zlib

  • 进入uwebsockets/uSockets/deps/zlib目录(若该目录不存在,直接克隆zlib仓库到项目本地的./deps/zlib)
  • 执行配置命令,指定静态库构建与本地安装路径:
    ./configure --prefix=./build --static
    
  • 编译并安装:
    mingw32-make && mingw32-make install
    
    编译产物会生成在./build/lib(静态库libzlib.a)和./build/include目录。

3. 构建libuv

  • 进入uwebsockets/uSockets/deps/uv目录(若不存在,克隆libuv仓库到./deps/uv)
  • 创建并进入构建目录:
    mkdir -p build && cd build
    
  • 用CMake生成MinGW兼容的Makefile,指定静态库与本地安装路径:
    cmake .. -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX=./install -DBUILD_SHARED_LIBS=OFF
    
  • 编译并安装:
    mingw32-make && mingw32-make install
    
    产物会生成在./install/lib(libuv.a)和./install/include目录。

4. 构建uSockets

  • 进入uwebsockets/uSockets目录
  • 执行make命令时指定编译器为g++,同时启用SSL(不需要可去掉SSL=1):
    mingw32-make CC=g++ SSL=1
    
    编译完成后,静态库libuSockets.a会生成在当前目录,头文件已存在于该目录的src文件夹。

5. 修改build.sh编译脚本

将原脚本中的$SEARCH替换为各依赖库的实际路径,同时补充头文件包含路径,示例修改后:

g++ -Wno-overflow -Wno-narrowing -fwrapv -O3 entry.cpp \
-Iuwebsockets/src \
-Iuwebsockets/uSockets/src \
-I./deps/zlib/build/include \
-I./deps/uv/build/install/include \
-L./deps/zlib/build/lib \
-L./deps/uv/build/install/lib \
-Luwebsockets/uSockets \
-lzlib -luv -luSockets -o main

注意事项

  • 所有依赖均构建为静态库,避免动态库的路径依赖问题。
  • 若执行make时提示命令不存在,直接使用mingw32-make替代make。
  • 克隆依赖仓库时,建议切换到与uSockets兼容的版本,避免编译报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 10:29:55