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?


86

Trong Windows, bằng cách sử dụng gcc của mingw, vẫn 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 explorer?

Câu trả lời:


181

Bạn cần tạo biểu tượng trước. Sau đó, bạn cần tạo một tệp RC với nội dung bên dưới. Ở đây chúng tôi sẽ đặt tên cho nó là my.rc.

id ICON "path/to/my.ico"

Những gì idđược đề cập trong lệnh trên có thể là bất cứ điều gì. Nó không quan trọng trừ khi bạn muốn tham chiếu đến nó trong mã của mình. Sau đó chạy windres như sau:

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

Sau đó, trong khi xây dựng tệp thực thi, cùng với các tệp đối tượng và tệp tài nguyên khác, hãy bao gồm my.resnhững tệp mà chúng ta đã nhận được từ bước trên. ví dụ:

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

Và đó là tất cả những gì cần có.


Và, miễn phí, nếu bạn muốn bao gồm thông tin phiên bản trong ứng dụng của mình, hãy thêm bản soạn thảo sau vào một .rctệp mới và làm theo các bước đã đề cập ở trên.

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 dành cho tiếng Anh Anh (là bản địa hóa gần nhất với Úc mà tôi có thể xác định.) Nếu bạn muốn "tiếng Anh" của Mỹ, hãy thay đổi BLOCK dòng thành:

BLOCK "040904E4"

và dòng dịch sang:

VALUE "Translation", 0x409, 1252

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


6
Sẽ thật tuyệt nếu ví dụ cho thấy nơi chèn dòng ICON.
chacham 15


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 thêm cặp WORD, WORD, ví dụ: VALUE "Translation", 0x409, 1252, 0x809, 1252sẽ bật cả tiếng Anh Mỹ và Anh theo msdn.microsoft.com/en-us/ thư viện / 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ó một biểu tượng được nhúng vào một biểu tượng exemà tôi cần.
Evgeni Sergeev

6

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

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

Bạn có thể dùng:

windres my.rc my.o

1
Tôi không thể liên kết my.ovới MinGW's g++after 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đường dẫn hoạt động tốt.
Evgeni Sergeev

.o(= COFF tự động; tôi đặt tên như vậy my.res.ocho rõ ràng) phù hợp với tôi. Trên thực tế .rescác tập tin như sản xuất bởi MSVC có một định dạng khác nhau, vì vậy nó có vẻ là lẻ / không tương thích sử dụng COFF trong.res
kxr

1

Hãy thử Resource Hacker. Tôi đã có thể biên dịch chéo dự án của mình trong Linux (WSL) và tạo một biểu tượng từ logo trên trang chủ. Chỉ cần một cách đơn giản để nhúng nó vào exe và chương trình này hoạt động tuyệt vời. Resource Hacker của Angus Johnson


Cách này dễ dàng hơn. Chỉ cần mở .exe, nhấp vào "Thêm tài nguyên nhị phân hoặc hình ảnh", mở tệp .ico và lưu.
endolith
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.