Jak dodać ikonę do skompilowanego pliku wykonywalnego mingw-gcc?

87

Czy w systemie Windows, używając gcc mingw, można określić, że wyjściowy plik exe ma pobierać plik ikony, aby plik exe był wyświetlany z tą ikoną w eksploratorze?

Mihai Limbășan
źródło

Odpowiedzi:

182

Najpierw musisz utworzyć ikonę. Następnie musisz utworzyć plik RC z poniższą zawartością. Tutaj nazwiemy to jako my.rc.

id ICON "path/to/my.ico"

idWspomniano w powyższym poleceniu może być prawie wszystko. Nie ma to znaczenia, chyba że chcesz odwołać się do tego w swoim kodzie. Następnie uruchom wiatry w następujący sposób:

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

Następnie podczas budowania pliku wykonywalnego, wraz z innymi plikami obiektowymi i plikami zasobów, dołącz, my.resktóre otrzymaliśmy z powyższego kroku. na przykład:

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

I to powinno być wszystko.


I bez dodatkowych opłat, jeśli chcesz dołączyć informacje o wersji do swojej aplikacji, dodaj następujący szablon do nowego .rcpliku i wykonaj powyższe kroki.

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

Uwaga, langID dotyczy brytyjskiego angielskiego (który jest najbliższą lokalizacją Australii, jaką mogłem zidentyfikować). Jeśli chcesz, aby amerykański „angielski”, zmień BLOCK wiersz na:

BLOCK "040904E4"

i wiersz tłumaczenia na:

VALUE "Translation", 0x409, 1252

Więcej informacji można znaleźć w zasobach VERSIONINFO .

Evan
źródło
6
Byłoby wspaniale, gdyby przykład pokazał, gdzie wstawić wiersz ICON.
chacham15
I ... po drugie .. stackoverflow.com/questions/1411040/…
Erik Friesen,
możesz również dołączyć wiele „Tłumaczenia” (po prostu informuje system Windows, że ten program jest przetłumaczony), dodając po prostu WORD, pary WORD, na przykład: VALUE "Translation", 0x409, 1252, 0x809, 1252włączy zarówno angielski amerykański, jak i angielski zgodnie z msdn.microsoft.com/en-us/ biblioteka / aa381058.aspx . Oznacza to również, że możesz dołączyć więcej niż jeden 'BLOCK "lang04E4"'
WorldSEnder
Użyłem darmowego narzędzia Nirsoft, IconsExtractaby uzyskać ikonę osadzoną w exepotrzebnym mi.
Evgeni Sergeev
6

W pliku RC nazwaID nie musi być nawet nazwą, może to być po prostu liczba całkowita. Nazwa pliku musi być cytowana tylko wtedy, gdy zawiera spację. Zamiast:

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

Możesz użyć:

windres my.rc my.o
Steven Penny
źródło
1
Nie mogłem połączyć tego my.oz MinGW g++po windres my.rc my.o(jakiś WinMainzwiązany z nim komunikat o błędzie), ale windres my.rc -O coff -o my.resścieżka działała dobrze.
Evgeni Sergeev
.o(= COFF automatycznie; nazywam to jak my.res.odla jasności) działa dla mnie. W rzeczywistości .respliki utworzone przez MSVC mają inny format, więc wydaje się, że jest dziwny / niezgodny przy użyciu COFF w.res
kxr
1

Wypróbuj Resource Hacker. Udało mi się skompilować mój projekt w systemie Linux (WSL) i wygenerować ikonę z logo na stronie głównej. Potrzebowałem tylko prostego sposobu na osadzenie go w exe i ten program działał świetnie. Resource Hacker autorstwa Angusa Johnsona

noabody
źródło
To było o wiele łatwiejsze. Po prostu otworzyłem plik .exe, kliknąłem „Dodaj binarny lub zasób obrazu”, otworzyłem plik .ico i zapisałem.
endolit