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

Mingw32编译C++程序无法运行,Mingw64运行正常

Mingw32编译FFmpeg依赖程序无法执行的排查与解决
  • 确认FFmpeg库架构匹配
    用Mingw32编译时必须链接32位FFmpeg库,如果误用到64位库,程序会直接崩溃,连初始化代码都跑不起来。可以通过查看库文件属性或Mingw自带的file命令,验证libavformat.a/libavdevice.a是i686架构,确保和编译器架构完全匹配。

  • 指定正确的32位编译器
    避免系统默认调用Mingw64的g++,直接使用Mingw32路径下的编译器编译,比如:

    C:\mingw32\bin\g++ -g t.cpp -lavformat -lavdevice -o t_32.exe
    

    也可以用where g++命令检查当前使用的编译器路径,确保是32位版本的工具链。

  • 检查运行时动态库
    32位程序需要配套的32位动态库支持:FFmpeg的avformat-xx.dll、avdevice-xx.dll,还有Mingw32的运行时库(比如libstdc++-6.dll、libgcc_s_dw2-1.dll)。把这些文件放到程序同一目录,或者添加到系统的32位PATH路径中。如果双击程序无反应,打开命令提示符运行程序,会看到动态库缺失的具体错误提示。

  • 先验证Mingw32工具链本身是否正常
    写一个纯32位的HelloWorld测试程序,排除工具链本身的问题:

    #include <iostream>
    int main() {
        std::cout << "hello world" << std::endl;
        return 0;
    }
    

    用mingw32-g++ -g test.cpp -o test.exe编译后运行,如果这个程序都无法执行,说明Mingw32安装存在问题,需要重新安装干净的32位版本。

  • 用调试工具定位具体问题
    编译时添加-v参数,查看完整的编译链接过程,确认链接的库路径和文件是否正确:

    mingw32-g++ -g -v t.cpp -lavformat -lavdevice
    

    用Mingw32的gdb调试程序:运行gdb t_32.exe,输入run命令后查看崩溃时的调用栈,能直接定位到是加载哪个环节出现了问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 20:42:50