鱼C论坛

 找回密码
 立即注册
查看: 371|回复: 3

怎么用MinGW64编译32位程序?

[复制链接]
发表于 2024-10-12 21:57:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 轻装前行 于 2024-10-12 21:59 编辑

64位的可以,就是32位的不行,网上都搜不到解决方法,

部分错误日志:
cmd /c chcp 65001>nul && C:\mingw64\bin\g++.exe -fdiagnostics-color=always -g -m32 C:\Users\xxx\Desktop\cdm\demo.cpp -o C:\Users\xxx\Desktop\cdm\demo.exe

C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lkernel32: No such file or directory
C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.2.0/../../../../x86_64-w64-mingw32/lib/libkernel32.a when searching for -lkernel32
collect2.exe: error: ld returned 1 exit status


总结就是:
cannot find lmingw32,liconv,lkernel32,luser32,lshell32,ladvapi32,lmsvcrt,lmingwex,lgcc,lgcc_s,lmingw32  一大堆看不懂的依赖

然后ld.exe返回了1,编译失败退出。

有没有解决办法? 还是只能换mingw32了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-10-12 21:57:16 | 显示全部楼层
编译32位程序遇到的问题通常是因为没有安装适合编译32位程序的库和工具。以下是解决方法:

1. **安装32位的MinGW工具链**:
   - 你需要一个能够编译32位程序的MinGW工具链。可以使用MinGW-w64 i686版本。
   - 使用`mingw-get`工具,或者到[MinGW-w64官方网站](https://mingw-w64.org/doku.php/download)下载i686版本的MinGW-w64。

2. **配置环境变量**:
   - 安装完成后,将32位版本的MinGW的 `bin` 目录路径添加到系统的环境变量 `PATH` 中。确保这个路径在64位版本的路径之前。

3. **使用正确的编译器选项**:
   - 确保在编译时使用 `-m32` 选项,以指定要生成32位构建。
   - 检查你是否使用了正确的库路径和库文件,可以通过`-L`选项和`-l`选项来手动指定。

4. **确认库兼容性**:
   - 确保链接的库都是32位的。因为链接32位程序所需的库必须都是32位格式,尝试使用32位的系统库。

尝试以上方法后,应该可以解决无法编译32位程序的问题。如果还有问题,检查环境变量配置是否有误,或提供更多错误日志以便更具体的分析。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-12 22:17:49 | 显示全部楼层
编译器用的是github.com/niXman/mingw-builds-binaries/releases/download/14.2.0-rt_v12-rev0/x86_64-14.2.0-release-win32-seh-ucrt-rt_v12-rev0.7z
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-10-12 22:23:27 | 显示全部楼层
轻装前行 发表于 2024-10-12 22:17
编译器用的是github.com/niXman/mingw-builds-binarie ...


你使用的编译器是64位的MinGW版本,默认情况下可能不支持编译32位程序。要解决这个问题,你可以尝试以下步骤:

1. **下载32位版本的MinGW**:
   - 从MinGW-w64项目的下载页面获取32位版本的工具链。选择i686架构的版本。

2. **安装32位工具链**:
   - 解压下载的32位工具链,并将其路径添加到系统的环境变量`PATH`中。确保这个路径在64位工具链的路径之前。

3. **编译时指定32位架构**:
   - 使用`-m32`选项来指定编译32位程序。例如:
   
g++ -m32 -o demo.exe demo.cpp

4. **检查库路径**:
   - 确保链接的库都是32位的。你可能需要手动指定库路径,使用`-L`选项来指向32位库的目录。

5. **验证工具链配置**:
   - 确保工具链的配置文件中没有错误,特别是`specs`文件中是否正确配置了32位的库路径。

通过这些步骤,你应该能够成功编译32位程序。如果问题仍然存在,建议检查是否有其他依赖项需要32位版本,或者尝试使用其他版本的MinGW工具链。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 19:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表