我的最终目标是设置使用MinGW gcc-g ++编译的可执行文件的版本(显示在properties->详细信息中)。但是现在我想用windres编译一个资源文件,以便以后能够手动链接它。但是当我使用此命令时出现以下错误:windres resource.rc -o resource.res
:
windres: resource.rc:2: syntax error
The process tried to write to a nonexistent pipe.
...
The process tried to write to a nonexistent pipe.
resource.rc:4:0: fatal error: when writing output to : Invalid argument
VS_VERSION_INFO VERSIONINFO
compilation terminated.
windres: preprocessing failed.
我的resource.rc看起来像这样:
#include "winver.h"
#include "../include/resource.h"
VS_VERSION_INFO VERSIONINFO
FILEVERSION 0,0,0,2
PRODUCTVERSION 0,0,0,2
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
{
BLOCK "StringFileInfo"
{
BLOCK "040904b0"
{
VALUE "Comments", "comment\0"
VALUE "CompanyName", "comment\0"
VALUE "FileDescription", "base file\0"
VALUE "FileVersion", "0.0.0.2 TP\0"
VALUE "InternalName", "testTP\0"
VALUE "LegalCopyright", "none\0"
VALUE "OriginalFilename", "test.exe\0"
VALUE "ProductName", "test\0"
VALUE "ProductVersion", "0.0.0.2 TP\0"
}
}
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x409, 1200
}
}
我的resource.h只是空的,也许这就是问题所在?令我惊讶的是,在exe中的属性选项卡中简单地设置版本号是多么复杂。我一直在阅读很多其他的答案,但没有一个对我有用。对于例如在获得此resource.rc文件后,this one似乎过于含糊不清。
答案 0 :(得分:0)
作为资源编译器,windres
不知道在文件中找到的常量,因此您需要提供这些常量,通常通过include来完成。
最简单的方法是将文件头调整为以下内容:
#include <windows.h>
VS_VERSION_INFO VERSIONINFO
FILEVERSION 0,0,0,2
PRODUCTVERSION 0,0,0,2
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
/* rest follows */
当您想用gcc编译/链接时,您希望windres输出目标文件,否则以后将无法链接它。
要解决此问题,请将compile命令更改为windres resource.rc -o resource.o
。