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

截至2022年12月,如何用Cygwin创建32位(i686)二进制文件?

在64位Windows的Cygwin64环境中生成32位(i686) DLL的问题与解决方案

问题概述

  • 2022年12月及更早的相关解决方案已失效:Cygwin64官方仓库已移除cygwin32-*系列交叉编译包,对应链接返回404。
  • 当前使用Cygwin64仅能生成64位(x64)二进制文件,需生成32位DLL但遇到以下问题:
    • 给gcc添加-m32参数时,出现库不兼容报错(如跳过libgcc_s.dll.a),链接失败。
    • 尝试运行32位Cygwin安装程序(setup-x86.exe)时,64位Windows 10 22H2系统提示“32位Windows不支持Cygwin”,无法完成安装。

最小复现案例

成功的64位DLL编译命令

$ gcc -shared -o test.dll -Wl,--out-implib test.dll.a dll_test.c

失败的32位DLL编译命令

$ gcc -m32 -shared -o test.dll -Wl,--out-implib test.dll.a dll_test.c

错误信息:跳过不兼容的libgcc_s.dll.a库,最终链接失败。

测试代码dll_test.c

int test_function(void)
{
    return 42;
}

有效解决方案(2024年适用)

Cygwin官方已放弃原生32位交叉编译支持,推荐使用MinGW-w64交叉工具链生成32位Windows DLL:

  1. 安装32位MinGW交叉编译包
    打开Cygwin的setup-x86_64.exe,搜索并安装以下包:

    • mingw64-i686-gcc-core:基础32位C编译工具
    • 若需C++编译支持,额外安装mingw64-i686-gcc-g++
  2. 编译32位DLL
    使用MinGW交叉编译命令替代原生gcc,无需添加-m32参数:

    $ i686-w64-mingw32-gcc -shared -o test_32.dll -Wl,--out-implib test_32.dll.a dll_test.c
    
  3. 验证DLL架构
    用Cygwin的file命令确认生成的是32位文件:

    $ file test_32.dll
    

    正确输出示例:PE32 executable (DLL) (console) Intel 80386, for MS Windows

关键说明

  • MinGW工具链生成的是原生Windows DLL,不依赖Cygwin运行时库(cygwin1.dll),与Cygwin原生编译的DLL依赖环境不同,需根据实际需求选择。
  • 若必须生成依赖32位Cygwin运行时的DLL,目前官方无支持方案,可考虑使用Docker容器运行2022年之前的旧版Cygwin进行编译。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:25:49