Как добавить значок в скомпилированный исполняемый файл mingw-gcc?


87

Можно ли в Windows, используя gcc mingw, указать, что выходной exe-файл должен принимать файл значка, чтобы exe-файл отображался с этим значком в проводнике?

Ответы:


182

Сначала вам нужно создать значок. Затем вам нужно создать RC-файл со следующим содержимым. Здесь мы назовем его my.rc.

id ICON "path/to/my.ico"

idУказано выше в команде может быть в значительной степени все. Это не имеет значения, если вы не хотите ссылаться на него в своем коде. Затем запустите windres следующим образом:

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


вы также можете включить несколько «Переводов» (это просто говорит Windows, что эта программа переведена), просто добавив WORD, WORD-пары, например: VALUE "Translation", 0x409, 1252, 0x809, 1252включит английский и американский английский в соответствии с msdn.microsoft.com/en-us/ библиотека / aa381058.aspx . Это также говорит вам, что вы можете включить более одного «БЛОКА" lang04E4 "»
WorldSEnder

Я использовал бесплатную утилиту Nirsoft, IconsExtractчтобы встроить значок в нужный файл exe.
Евгений Сергеев

6

В RC-файле nameID даже не обязательно должно быть именем, это может быть просто целое число. Имя файла должно быть заключено в кавычки, только если оно содержит пробел. Вместо того:

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

Ты можешь использовать:

windres my.rc my.o

1
Я не мог связать его my.oс MinGW g++после windres my.rc my.o(какое-то WinMainсообщение об ошибке), но windres my.rc -O coff -o my.resпуть работал нормально.
Евгений Сергеев

.o(= COFF автоматически; я называю это как my.res.oдля ясности) у меня работает. На самом деле .resфайлы, созданные MSVC, имеют другой формат, поэтому он кажется странным / несовместимым с использованием COFF in.res
kxr

1

Попробуйте Resource Hacker. Мне удалось скомпилировать свой проект в Linux (WSL) и создать значок из логотипа на домашней странице. Просто нужен был простой способ встроить его в exe, и эта программа отлично работала. Ресурсный хакер, Ангус Джонсон


Это было намного проще. Просто открыл .exe, щелкнул «Добавить двоичный или ресурс изображения», открыл ICO-файл и сохранил.
эндолиты
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.