Синтаксическая ошибка Windres - PullRequest
0 голосов
/ 14 декабря 2011

Я работаю в среде MinGW (скачано с их установщиком 12.12.2011). Я пытаюсь скомпилировать файл ресурса (.rc) с помощью Windres. Конкретная команда, которую я использую, -

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

Windres генерирует не менее 100 строк предупреждающих сообщений: «предупреждение: нулевые символы игнорируются». После этого Windres выдает: «Abouty1.rc: 1: синтаксическая ошибка».

На самом деле, в файле About1.rc нет нулевых символов. В дополнение, первая строка файла - это оператор включения: #include "dlgresource.h". Я поиграл и удалил это утверждение, и оказалось, что не имеет значения, что я туда поместил, я получаю тот же поток сообщений и уведомление об ошибке синтаксиса.

Чтобы еще больше запутать, этот же файл .rc без проблем компилируется с использованием MSFT rc.exe. Полученный файл .res плавно связывается с файлом программы .obj и отлично работает.

Понятия не имею, что происходит. Есть идеи?

Спасибо, Марк Аллин

Ответы [ 4 ]

3 голосов
/ 08 апреля 2012

Ваш файл .rc, вероятно, закодирован как UTF-16.

Это то, что обычно требуется Microsoft [rc.exe], чтобы иметь возможность работать с международными символами, но GNU [windres.exe] может работать только с кодировкой ANSI.

Один из обходных путей - конвертировать файл в ANSI на месте (возможно, с потерей, например, русских или греческих символов):

> chcp 1252
Active code page: 1252

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

> _
1 голос
/ 29 июля 2012

Возможно, вы использовали VS или аналогичный инструмент для создания файла. Есть некоторые части кодировки символов, которые вы не видите, в результате чего появляются нулевые символы и т. Д.

Создайте новый файл .res с тем же содержимым, не копируйте и не вставляйте содержимое, введите его самостоятельно.

0 голосов
/ 16 апреля 2016

У меня были те же проблемы, что и у вас сегодня.Я знаю, что от вашего вопроса прошло много времени, но я пишу это в надежде, что это кому-нибудь пригодится.

Сначала я получил объектный файл .o, скомпилированный с использованием Cygwin , запись:

windres -o resource.o resource.rc

Для этого вам не нужно использовать файл .res, а только .o, и вы можете затем связать этот объект со всеми остальными, когда вы компилируете свою программу, используя ресурсы GNU:

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

Например.

0 голосов
/ 20 марта 2014

Попробуйте:

    windres About1.rc -o About1.o

, а затем просто используйте полученный файл .o вместо первоначально предназначенного .res файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...