如何在mingw-gcc编译的可执行文件中添加图标?


86

在Windows中,使用mingw的gcc,是否仍然指定输出的exe文件采用图标文件,以便exe文件在资源管理器中显示该图标?

Answers:


181

您需要先创建图标。然后,您需要使用以下内容创建一个RC文件。在这里,我们将其命名为my.rc

id ICON "path/to/my.ico"

id上面提到的命令可以是相当多的东西。除非您要在代码中引用它,否则不要紧。然后按照以下方式运行windes:

windres my.rc -O coff -o my.res

然后,在构建可执行文件以及其他目标文件和资源文件时,包括my.res我们从上述步骤中获得的内容。例如:

g++ -o my_app obj1.o obj2.o res1.res my.res

那应该就是它的全部了。


并且,如果要在应用程序中包含版本信息,则无需额外付费,可以将以下样板添加到新.rc文件中,然后执行上述步骤。

1 VERSIONINFO
FILEVERSION     1,0,0,0
PRODUCTVERSION  1,0,0,0
BEGIN
  BLOCK "StringFileInfo"
  BEGIN
    BLOCK "080904E4"
    BEGIN
      VALUE "CompanyName", "My Company Name"
      VALUE "FileDescription", "My excellent application"
      VALUE "FileVersion", "1.0"
      VALUE "InternalName", "my_app"
      VALUE "LegalCopyright", "My Name"
      VALUE "OriginalFilename", "my_app.exe"
      VALUE "ProductName", "My App"
      VALUE "ProductVersion", "1.0"
    END
  END
  BLOCK "VarFileInfo"
  BEGIN
    VALUE "Translation", 0x809, 1252
  END
END

注意,langID用于英国英语(这是我可以识别的最接近澳大利亚的本地化语言。)如果要使用美国“英语”,请将BLOCK 行更改为:

BLOCK "040904E4"

和翻译行到:

VALUE "Translation", 0x409, 1252

有关信息,请参见VERSIONINFO资源


6
如果该示例显示了在哪里插入ICON行,那就太好了。
chacham15 2013年


您还可以通过仅附加WORD和WORD-pairs来包括多个“翻译”(这只是告诉Windows该程序已被翻译):VALUE "Translation", 0x409, 1252, 0x809, 1252根据msdn.microsoft.com/zh-cn/启用美国英语和英国英语library / aa381058.aspx。这也告诉您可以包含多个'BLOCK“ lang04E4”'
WorldSEnder 2014年

我使用Nirsoft的免费实用程序IconsExtract将图标嵌入到所需的图标中exe
Evgeni Sergeev

6

在RC文件中,nameID甚至不必是名称,而可以是整数。该文件名必须唯一,如果它包含空格报价。代替:

windres my.rc -O coff -o my.res

您可以使用:

windres my.rc my.o

1
我无法将其my.o与MinGW的g++after链接windres my.rc my.o(一些WinMain相关的错误消息),但是windres my.rc -O coff -o my.res路径工作正常。
Evgeni Sergeev

.o(=自动COFF;my.res.o为清晰起见,我起了个名字)对我有用。实际上.res,由MSVC生成的文件具有不同的格式,因此在.res
kxr

1

尝试Resource Hacker。我能够在Linux(WSL)中交叉编译我的项目,并从主页上的徽标生成一个图标。只需要一种简单的方法将其嵌入exe中,该程序就可以很好地工作。 安格斯·约翰逊(Angus Johnson)的资源黑客


这很容易。只需打开.exe,单击“添加二进制或图像资源”,打开.ico文件,然后保存。
endolith
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.