Windres语法错误

时间:2011-12-13 23:43:29

标签: resources mingw

我在MinGW环境中工作(在12/12/2011下载了他们的安装程序)。我正在尝试使用Windres编译资源(.rc)文件。我使用的具体命令是

Windres -O coff About1.rc -o About1.res

Windres生成至少100行警告消息:“警告:忽略空字符”。在此Windres发出后:“Abouty1.rc:1:语法错误”。

事实上,About1.rc文件中没有空字符。另外,文件的第一行是include语句:#include“dlgresource.h”。我玩了一遍并删除了这个声明,结果发现我放在那里并不重要,我得到了同样的一连串消息和语法错误通知。

为了让事情更加混乱,使用MSFT的rc.exe编译同样的.rc文件没有任何问题。生成的.res文件与程序.obj文件平滑地链接并完美运行。

我不知道发生了什么事。有什么想法吗?

谢谢, 马克·艾琳

4 个答案:

答案 0 :(得分:3)

您的.rc文件可能编码为UTF-16。

这是微软[rc.exe]的一般要求,以便能够处理国际字符,但GNU [windres.exe]只能处理ANSI编码。

一种解决方法是将文件转换为ANSI(可能会丢失例如俄语或希腊语字符):

> chcp 1252
Active code page: 1252

> type my.rc | windres --output-format=COFF -o my.res

> _

答案 1 :(得分:1)

您可能使用VS或类似工具来生成文件。字符编码的某些部分是您无法看到的,导致空字符等等。

生成具有相同内容的新.res文件,不要复制/粘贴内容,自行输入内容。

答案 2 :(得分:0)

尝试:

    windres About1.rc -o About1.o

然后只使用生成的.o文件而不是最初的.res文件。

答案 3 :(得分:0)

我遇到了比你今天更多的麻烦。我知道它已经从你的问题中花了很多时间,但我正在写这篇文章,希望它对某人有用。

首先,我获得了一个使用 Cygwin 编译的目标文件.o,写道:

windres -o resource.o resource.rc

通过这样做,您不需要使用.res文件,而是使用.o文件,然后在使用GNU资源编译yout程序时,可以将此对象与所有其他对象链接起来:

g++ Header_files CPP_files flags ... -o program.exe recource.o -lm

例如。