2011-12-13 20 views
0

我在MinGW環境中工作(在12/12/2011與他們的安裝程序一起下載)。我正在嘗試使用Windres編譯資源(.rc)文件。我用的特定命令是Windres語法錯誤

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

Windres產生至少100行警告消息讀取的:「警告:忽略空字符」。在此之後Windres發出:「Abouty1.rc:1:語法錯誤」。

事實上,About1.rc文件中沒有空字符。另外,文件的第一行是一個包含語句:#include「dlgresource.h」。我玩過並消除了這個聲明,事實證明,我放在那裏並不重要,我得到了相同的信息和語法錯誤通知。

爲了讓事情更加令人困惑,使用MSFT的rc.exe,這個相同的.rc文件編譯沒有任何問題。生成的.res文件與程序.obj文件平滑鏈接,運行完美。

我不知道發生了什麼事。有任何想法嗎?

謝謝, 馬克·阿林

回答

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

您可能使用VS或類似工具生成的文件。有一些字符編碼部分不能生成空字符等。

生成一個新的具有相同內容的.res文件,請勿複製/粘貼內容,請自行輸入。

0

嘗試:

windres About1.rc -o About1.o 

,然後只用產生的.o文件,而不是原定res文件。

0

我今天遇到了和你今天一樣的麻煩。我知道它已經從你的問題中經過了很多時間,但我正在寫這篇文章,希望它能對某人有用。

首先,我得使用Cygwin的編譯的目標文件.o,書面方式:

windres -o resource.o resource.rc 

通過這樣做,你不需要使用.res文件,但.o一個,然後你可以鏈接這個對象與所有其他的,當你編譯你的程序時,使用GNU資源:

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

例如,