如何在 Linux 上用 MinGW-w64 交叉编译 GLFW 的 Windows 二进制【免费下载链接】glfwA multi-platform library for OpenGL, OpenGL ES, Vulkan, window and input项目地址: https://gitcode.com/GitHub_Trending/gl/glfw如果你有一台 Linux 主机Ubuntu、Debian 等发行版或 Cygwin但不想在 Windows 上跑构建又想拿到可供 Windows 应用链接的 GLFW 库文件这就是交叉编译要解决的问题用 MinGW-w64 工具链把 GLFW 源码编译成 Windows 目标的可执行产物。整个过程只需要 CMake 加一个工具链文件不需要在 Linux 上安装任何 Windows SDK。前提条件均来自 编译指南 和 READMELinux 主机上已安装 CMake 3.16 或更高版本GLFW 的 CMake 文件要求 CMake 最低版本为 3.16已安装 MinGW-w64 交叉编译器。Debian/Ubuntu 系是一个mingw-w64包同时包含 32 位和 64 位版本Cygwin 则对应mingw64-i686-gcc32 位和mingw64-x86_64-gcc64 位两个包GLFW 源码树已经拿到手cmake -S参数要指向源码树根目录而不是它的src子目录。交叉编译不需要 编译指南 里给 Linux 原生构建列的那批 X11/Wayland 开发包——那些只用于编译 Linux 目标。Windows 目标的 GLFW 只使用 Win32 后端依赖的是 MinGW-w64 工具链自带的 Windows 头文件工具链文件会通过CMAKE_FIND_ROOT_PATH把它们指到/usr/x86_64-w64-mingw32或/usr/i686-w64-mingw32下。选择与你的 MinGW-w64 前缀匹配的工具链文件GLFW 在CMake/子目录里提供了四个现成的工具链文件分别对应两种位宽和 GCC/Clang 两种编译器文件目标CMake/x86_64-w64-mingw32.cmake64 位MinGW-w64 GCCCMake/i686-w64-mingw32.cmake32 位MinGW-w64 GCCCMake/x86_64-w64-mingw32-clang.cmake64 位MinGW-w64 ClangCMake/i686-w64-mingw32-clang.cmake32 位MinGW-w64 Clang选哪一个取决于你系统上 MinGW-w64 二进制文件的前缀。文档给出的判断方法是看/usr目录下的前缀名Ubuntu 和 Cygwin 的 MinGW-w64 包 64 位编译器前缀都是/usr/x86_64-w64-mingw3232 位是/usr/i686-w64-mingw32。工具链文件内部就是按这个前缀设置的例如CMAKE_C_COMPILER设为x86_64-w64-mingw32-gcc、CMAKE_RC_COMPILER设为x86_64-w64-mingw32-windres目标系统设为Windows。如果你发行版安装出来的前缀不同需要换成与你的前缀一致的工具链文件或自己照着上面的格式改一个但注意不要改仓库内容把它复制到构建流程引用的位置。配置用 -D CMAKE_TOOLCHAIN_FILE 指定工具链进入 GLFW 源码树执行标准的 CMake 配置命令只多一个-D CMAKE_TOOLCHAIN_FILE选项cd path/to/glfw cmake -S . -B build -D CMAKE_TOOLCHAIN_FILECMake/x86_64-w64-mingw32.cmake这里有两个容易踩的点文档都明确写了path/to/glfw是 GLFW 源码树根目录不是src子目录工具链文件的路径是相对于-S传入的源码树路径解析的不是相对于当前工作目录。所以先cd进源码树、-S传.时工具链文件直接写CMake/x86_64-w64-mingw32.cmake即可。配置成功的判断依据CMake 输出中不再报找不到编译器并打印后端选择状态。由于目标是 Windowscmake_dependent_option使 Win32 选项在WIN32条件下默认开启你会看到Including Win32 support而 X11/Wayland 不会出现在输出里。默认结果是静态库BUILD_SHARED_LIBS默认关闭产出的是静态 GLFW。想要 DLL在配置命令里追加一个-D选项即可可选分支cmake -S . -B build -D CMAKE_TOOLCHAIN_FILECMake/x86_64-w64-mingw32.cmake -D BUILD_SHARED_LIBSON编译文档给出的通用编译命令是cmake --build它会运行该构建目录对应的平台特定构建工具对交叉编译来说是最省事的入口cmake --build build不建议手动mingw32-make——mingw32-make在 编译指南 中是作为在 MinGW 环境下编译的说法出现的而 Linux 主机上直接调用它并不属于文档描述的路径cmake --build会按工具链文件配置的编译器驱动整个构建。验证构建产物构建完成后到构建目录检查产物。按 src/CMakeLists.txt 的逻辑Windows 目标的输出名固定为glfw3非 Unix 平台不走soname命名分支静态构建默认build/src/下出现libglfw3.a共享构建BUILD_SHARED_LIBSON同时出现glfw3.dll和导入库glfw3dll.aDLL 的VERSION属性取库的主.次版本号当前源码树为 3.5.0。由于是在 Linux 上交叉编译出来的 Windows PE 目标文件可以用常规手段确认产物类型file build/src/libglfw3.a file build/src/glfw3.dll输出里出现 Windows/PE 相关字样如COFF、PE32即说明交叉编译按预期生成了 Windows 二进制而不是 Linux 目标文件。默认情况下示例程序GLFW_BUILD_EXAMPLES和测试程序GLFW_BUILD_TESTS在独立构建时也是开启的所以你会一并得到编译好的示例可执行文件例如build/examples/下的glfwinfo.exe等 Windows PE 可执行文件——它们可以在 Windows 上运行用来验证交叉出来的 DLL 能正常加载。限制与后续工具链文件把目标系统写死为Windows因此交叉编译产物只覆盖 Win32 后端Wayland/X11 相关选项对这条路径不适用。如果编译器前缀与四个工具链文件都对不上非标准安装的 MinGW-w64配置阶段就会因找不到编译器而失败此时先核对/usr下的实际前缀再选文件。拿到glfw3.dll/libglfw3.a之后下一步是给 Windows 上的应用链接 GLFW参见 构建应用指南。【免费下载链接】glfwA multi-platform library for OpenGL, OpenGL ES, Vulkan, window and input项目地址: https://gitcode.com/GitHub_Trending/gl/glfw创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考