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

如何用MinGW windres编译资源文件?遇语法错误等问题求助

解决MinGW windres编译资源文件报错的问题

我来帮你搞定这个windres编译出错的问题,从报错信息来看,核心问题应该是你的resource.rc文件语法不符合MinGW windres的要求,尤其是版本信息段的写法(毕竟你的最终目标是给exe加上属性里的版本信息)。下面一步步来解决:

1. 编写符合windres要求的版本资源RC文件

MinGW的windres对RC语法的要求比MSVC的rc.exe更严格,比如字符串必须显式加\0结尾,版本块的结构不能错。给你一个可以直接用的模板,把里面的信息换成你的即可:

#include <windows.h>

VS_VERSION_INFO VERSIONINFO
FILEVERSION     1,0,0,0
PRODUCTVERSION  1,0,0,0
FILEFLAGSMASK   0x3fL
#ifdef _DEBUG
FILEFLAGS       0x1L  // 标记为调试版本
#else
FILEFLAGS       0x0L  // 发行版本
#endif
FILEOS          0x40004L  // 针对Windows NT/2000及以上系统
FILETYPE        0x1L      // 可执行文件类型
FILESUBTYPE     0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904B0"  // 英文(美国) + UTF-16LE编码,适配Windows属性显示
        BEGIN
            VALUE "CompanyName", "你的公司名称\0"
            VALUE "FileDescription", "你的程序描述\0"
            VALUE "FileVersion", "1.0.0.0\0"
            VALUE "ProductName", "你的产品名称\0"
            VALUE "ProductVersion", "1.0.0.0\0"
            // 还可以按需添加其他字段,比如LegalCopyright、OriginalFilename等
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200  // 和上面的040904B0对应:0x409是语言ID,1200是编码ID
    END
END

2. 正确编译RC文件

用你原来的命令就可以,但如果还是有问题,可以显式指定格式来避免歧义:

windres resource.rc -o resource.res
# 或者更明确的写法,强制指定输入输出格式
windres --input-format=rc --output-format=coff --output resource.res resource.rc

3. 链接生成带版本信息的可执行文件

编译完.res文件后,用g++编译你的源码时把这个资源文件一起链接进去:

g++ main.cpp resource.res -o your_program.exe

错误原因说明

你遇到的syntax error是核心问题,那个“写入不存在的管道”的错误是windres因为语法错误异常退出时附带的无关报错,不用在意。常见的RC语法错误包括:

  • 字符串没有加\0结尾(windres要求必须显式写,MSVC的rc.exe会自动补全)
  • 版本块的层级结构写错(比如BLOCK嵌套逻辑错误)
  • 版本号、字段值的格式不符合要求(比如版本号的逗号分隔写法错误)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:19:42