我一直试图在 Windows 上编译一个链接有图标的程序。根据我最近的研究,因为我以前从未做过,因此您将使用程序信息(包括图标)制作一个.RC文件,您将然后使用 windres 将其转换为.RES文件,然后在编译时将其链接:
int a = 3; /* Scope 0. */
int main()
{
int a; /* Scope 1. */
a = 5;
{
int a; /* Scope 2 and so on... */
a = 9;
}
}
将成为
static void handle_finish_type (void *gcc_data, void *user_data)
{
(void) user_data;
tree t = (tree) gcc_data;
/* Skip everything that is not var decl. */
if (TREE_CODE (t) == VAR_DECL)
printf("scope: %d\n", TREE_PUBLIC(t));
}
int plugin_init (struct plugin_name_args *plugin_info,
struct plugin_gcc_version *version)
{
(void) version;
const char *plugin_name = plugin_info->base_name;
struct plugin_info pi = { "0.1", "Variable scope test" };
register_callback (plugin_name, PLUGIN_INFO, NULL, &pi);
register_callback (plugin_name, PLUGIN_FINISH_DECL,
&handle_finish_type, NULL);
return 0;
}
我猜这是正确的方法,但是我不确定,因为当我尝试编译程序时,会出现错误:
g++ program.cpp -o program.exe
该如何解决?我见过有人说,如果您正在编译32位程序(我相信是这样),则可以添加参数以将其转换为用于编译32位程序的.RES文件。我已经尝试过了,但是它给出了完全相同的问题,所以我认为那不是问题。
答案 0 :(得分:2)
在制作 .res 示例时添加 coff:windres my.rc -O coff my.res
这会将 .res 保存为可用格式。
我基于在堆栈溢出帖子和快速 wiki 搜索中使用它。 另外,我遇到了同样的问题,添加 coff 修复了它。 链接: https://stackoverflow.com/a/708382 https://en.wikipedia.org/wiki/COFF
答案 1 :(得分:0)
因此,您可以在 Windows 上使用 Visual Studio Developer-Powershell。
创建一个 .rc 文件(创建一个 .txt 文件并更改扩展名)。
我的.rc
iconName ICON "path_to_icon.ico"
将 my.rc 编译为 my.rcs。
rc my.rc
现在您想将其链接到您的可执行文件。但是你不能用 .rcs 文件做到这一点。你必须先用“cvtres”转换它。
cvtres /MACHINE:x64 my.res
这会生成一个名为“my.obj”的文件。例如,现在可以在调用 g++ 时链接此文件,就像上面的问题一样。
来源:https://docs.microsoft.com/en-us/windows/win32/menurc/renaming-the-compiled-resource-file
<块引用>然后必须调用 CVTRES 将 .res 文件转换为二进制文件 链接器可以理解的资源 (.rbj) 格式。
有关 Visual Studio 中包含的资源编译器的更多信息:https://docs.microsoft.com/en-us/windows/win32/menurc/resource-compiler
干杯