我在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文件平滑地链接并完美运行。
我不知道发生了什么事。有什么想法吗?
谢谢, 马克·艾琳
答案 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
例如。