在MinGW G ++中使用.RES文件进行编译时,无法识别.RES

时间:2019-12-11 01:43:05

标签: c++ windows icons

我一直试图在 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文件。我已经尝试过了,但是它给出了完全相同的问题,所以我认为那不是问题。

2 个答案:

答案 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

干杯