首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无论我做什么,Windres都不编译.rc文件

无论我做什么,Windres都不编译.rc文件
EN

Stack Overflow用户
提问于 2022-06-20 18:24:19
回答 2查看 410关注 0票数 0

因此,我正在使用C和Win32 API制作一个桌面应用程序。我还与MinGW一起使用CMake/Make。一切进展顺利,直到我想要向可执行文件中添加一个.rc文件。据我所知,您编写了一个.rc文件,然后编译成一个.res文件,然后假定您应该将它嵌入到可执行文件中。但是,当我尝试用GNU实用程序编译.rc文件时,它无法编译,这就是问题所在。我总是收到以下错误消息:

代码语言:javascript
复制
C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\bin\windres.exe: can't open file `page:': Invalid argument
C:\Code\C\test\resources.rc:4: fatal error: when writing output to : No such file or directory
4 | IDI_TEST_ICON    ICON    "test.ico"
  |
compilation terminated.
C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\bin\windres.exe: preprocessing failed.

为了完整起见,我尝试过的每个.rc文件都会出现这种情况,但是,下面是我要编译的当前测试文件:

代码语言:javascript
复制
#include <windows.h>
#include "resource.h"
IDI_TEST_ICON   ICON    "test.ico"

resource.h文件:

代码语言:javascript
复制
#define IDI_TEST_ICON 101

因此,最后一个问题是:为什么windres不成功编译.rc文件?在使用MinGW时,我能做些什么呢?

编辑1:值得注意的是,我还将.rc文件转换为ANSI格式,因为在UTF-8格式格式化时,windres会产生奇怪的错误。然而,同样的错误也会发生。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-22 13:41:08

经过大量的挖掘旧的论坛线程,我设法找到了一个“解决方案”的工作。然而,我仍然觉得奇怪的是,这解决了这个问题。我遵循Brecht的建议,并从winlibs.com下载了一个独立的构建。即使这样也没有解决导致我调查可能的RC_COMPILER_FLAGS的问题,这最终导致我找到了--use-temp-file标志。

此标志作为编译.rc文件的另一种方法,因为它不允许使用popen (或在Windows中与之等效)。根据文档,如果popen在主机上的实现是错误的,则应该使用此标志。这里有趣的是,文档指出,这是已知发生在某些非英语版本的Windows。在我的例子中,我使用的是瑞典语版本的Windows,这可能解释了为什么会出现这种情况。

因此,最终的解决办法是:

代码语言:javascript
复制
windres -i resource.rc -o resource.o --use-temp-file

它最终生成一个对象文件,然后该文件可以包含在add_executable调用中的CMake中。

票数 0
EN

Stack Overflow用户

发布于 2022-06-21 07:57:40

windres实际上生成一个对象文件(以COFF格式)

所以您应该像这样运行这个命令:

代码语言:javascript
复制
windres resource.rc -o resource.o

当我检查生成文件的格式时,如下所示:

代码语言:javascript
复制
file resource.o

我得到以下结果:

代码语言:javascript
复制
resource.o: Intel amd64 COFF object file, no line number info, not stripped, 1 section, symbol offset=0x3c4c, 1 symbols

因此,您只需要在链接步骤中包含生成的.o文件,就可以包含资源。

例如,当您运行以下命令时,您将得到一个不会运行的.exe,但它将在资源管理器中显示该图标:

代码语言:javascript
复制
gcc -shared -o resource.exe resource.o
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72691457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档