【问题标题】:Windres syntax errorWindres 语法错误
【发布时间】:2011-12-13 23:43:28
【问题描述】:

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

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

Windres 生成至少 100 行警告消息,内容为:“警告:已忽略空字符”。在此 Windres 之后发出:“Abouty1.rc:1:syntax error”。

事实上,About1.rc 文件中没有空字符。此外,文件的第一行是一个包含语句:#include "dlgresource.h"。我玩弄并消除了这个语句,结果发现我放在那里并不重要,我会收到同样的消息和语法错误通知。

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

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

谢谢, 马克·阿林

【问题讨论】:

    标签: resources mingw


    【解决方案1】:

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

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

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

    > chcp 1252 活动代码页:1252 > 输入 my.rc | windres --output-format=COFF -o my.res > _

    【讨论】:

      【解决方案2】:

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

      新建一个内容相同的.res文件,内容不要复制粘贴,自己输入。

      【讨论】:

        【解决方案3】:

        试试:

            windres About1.rc -o About1.o
        

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

        【讨论】:

          【解决方案4】:

          我今天遇到了和你一样的麻烦。我知道你的问题已经过去了很多时间,但我写这篇文章是希望它对某人有用。

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

          windres -o resource.o resource.rc
          

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

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

          例如。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-07-02
            • 2021-08-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-09-16
            相关资源
            最近更新 更多