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)的方法:
- 不全局安装库
- 仅使用MinGW编译,不安装Visual Studio或其任何组件
- 不重构项目使用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=1libuSockets.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
相关产品推荐
相关产品推荐

