2009-05-22 38 views
12

Tôi đang học cách phát triển các ứng dụng bằng Qt Creator. Tôi đã xây dựng một ứng dụng đơn giản trong Windows, phụ thuộc vào việc sử dụng mingwm10.dll, QtCore4.dll, QtGui4.dll, QtNetwork4.dll. Trong số QtQui4.dll tôi chỉ sử dụng một vài tiện ích và không cần tất cả các phần còn lại ... Có thể thu nhỏ kích thước của QtGui4.dll hoặc làm điều gì đó khác để giảm kích thước triển khai của ứng dụng không? Làm thế nào về liên kết tĩnh? Nó sẽ nhúng toàn bộ dll, hoặc chỉ một phần của nó được sử dụng? Và cũng có thể với Qt để liên kết một số dll tĩnh và một số năng động?Giảm kích thước ứng dụng GUI Qt

Trả lời

10

Không thể thu nhỏ QtGui4.dll bằng cách xóa một số chức năng. Trolltech là having a look at this, nhưng giải pháp tốt có vẻ khá xa:

Liên kết tĩnh, tôi nghĩ rằng nó rất có vấn đề trên cửa sổ. Mỗi lần tôi thử, đó là một cơn ác mộng.

Vì vậy, có vẻ như bạn đang mắc kẹt với DLL thông thường. Điều duy nhất bạn có thể làm (mà tôi làm cho các ứng dụng Qt của tôi là):

  • sử dụng UPX để nén DLL của bạn

hoặc

  • sử dụng nén mạnh trong cài đặt của bạn

Nếu bạn đã UPX dll của bạn, bạn không thể giảm nó hơn nữa với nén trình cài đặt, nhưng điều này có thể làm giảm các tệp khác.

+1

Yea, "UPX -9 QtGui4.dll" là cách để đi :) –

+0

Mẹo thú vị, tôi chưa bao giờ sử dụng UPX trước đây. – PowerApp101

+0

Cảm ơn bạn! Dấu chân nhỏ nhất của ứng dụng GUI Qt bạn có thể lưu trữ theo cách này là gì? – Dmitri

5

Cách tốt nhất là định cấu hình thư viện Qt theo cách thủ công với cấu hình. Bằng cách phát hành

configure --help 

bạn sẽ thấy một số tùy chọn có thể giúp giảm cả dung lượng đĩa và bộ nhớ. Ví dụ.

--no-stl 
--no-exceptions 

cả hai đều có thể làm giảm dấu chân của đơn đăng ký của bạn. Bạn cũng có thể sửa đổi mkspec để sử dụng các cờ tối ưu hóa tích cực hơn cho trình biên dịch của bạn.

1

Nếu bạn liên kết tĩnh bạn kết thúc với một exe 1.5GB và bạn hy sinh một số chức năng như trình cắm. Vì vậy, nó không thực sự có giá trị trừ khi bạn không muốn phân phối các dll. Nhưng vâng, bạn có thể thử đề xuất của Henrik và cũng loại trừ Webkit mà có lẽ là đoạn mã lớn nhất.

+0

Trong ngữ cảnh của câu hỏi ban đầu, ngoại trừ WebKit không tạo ra bất kỳ sự khác biệt nào không sử dụng nó (chỉ có Core, Gui, Network modules). –

Các vấn đề liên quan