如何用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
相关产品推荐
相关产品推荐

