Câu hỏi Làm cách nào để thêm biểu tượng vào tệp thực thi được biên dịch mingw-gcc?


Trong Windows, sử dụng gcc của mingw, có cách nào để chỉ định rằng tệp exe đầu ra là lấy tệp biểu tượng, để tệp exe hiển thị với biểu tượng đó trong trình khám phá?


76
2018-04-02 03:57


gốc




Các câu trả lời:


Bạn cần tạo biểu tượng trước. Sau đó, bạn cần tạo một tệp RC trông giống như thế này:

id ICON "path/to/my.ico"

ID có thể khá nhiều. Nó không quan trọng trừ khi bạn muốn tham khảo nó trong mã của bạn. Sau đó chạy windres như sau:

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

Sau đó, bạn chỉ bao gồm my.res cùng với tệp đối tượng của mình khi bạn liên kết, ví dụ:

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

Và đó nên là tất cả để có nó.


Và, không mất thêm phí, nếu bạn muốn bao gồm thông tin phiên bản trong ứng dụng, thêm bản mẫu sau vào .rc tập tin và sửa đổi thích hợp:

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

Lưu ý, langID là dành cho tiếng Anh của U.K. (là bản địa hóa gần nhất với Úc tôi có thể xác định.) Nếu bạn muốn "tiếng Anh" của Hoa Kỳ thì hãy thay đổi BLOCK dòng đến:

BLOCK "040904E4"

và dòng dịch sang:

VALUE "Translation", 0x409, 1252

Xem Tài nguyên VERSIONINFO để biết thông tin.


165
2018-04-02 05:14



Nó sẽ là tuyệt vời nếu ví dụ cho thấy nơi để chèn dòng ICON. - chacham15
Và ... thứ hai .. stackoverflow.com/questions/1411040/… - Erik Friesen
bạn cũng có thể bao gồm nhiều "Bản dịch" (nó chỉ cho Windows biết rằng chương trình này được dịch) bằng cách chỉ chắp thêm WORD, WORD-pairs, ví dụ: VALUE "Translation", 0x409, 1252, 0x809, 1252 sẽ cho phép cả tiếng Anh Mỹ và Anh theo msdn.microsoft.com/en-us/library/aa381058.aspx. Điều này cũng cho bạn biết rằng bạn có thể bao gồm nhiều hơn một 'BLOCK' lang04E4 "' - WorldSEnder
Tôi đã sử dụng tiện ích miễn phí của Nirsoft IconsExtract để có biểu tượng được nhúng trong exe mà tôi cần. - Evgeni Sergeev


Trong tệp RC, nameID thậm chí không phải là một cái tên, nó chỉ có thể là một số nguyên. Các tên tệp chỉ được trích dẫn nếu nó chứa khoảng trắng. Thay thế của:

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

Bạn có thể dùng:

windres my.rc my.o

5
2017-10-02 02:20



Tôi không thể liên kết my.o với MinGW's g++ sau windres my.rc my.o (một số WinMainthông báo lỗi liên quan), nhưng windres my.rc -O coff -o my.res con đường làm việc tốt. - Evgeni Sergeev