2010-09-09 15 views
6

Tôi mới sử dụng Qt nhưng không có vấn đề gì trong C++. Tôi đã sử dụng Qt Creator và thực hiện một chương trình đơn giản với một nút (như một thế giới hello) sau đó tôi đã xây dựng dự án. Tôi không thể chạy tệp thực thi trong chính cửa sổ (bên ngoài trình tạo) vì nó cần các tệp DLL này:170 MB Hello World -> Triển khai ứng dụng với Qt

libgcc_s_dw2-1.dll 
mingwm10.dll 
QtGuid4.dll 
QtCored4.dll 

Tôi tìm thấy các tệp này và đặt chúng bên cạnh exe. Bây giờ chương trình hoạt động nhưng thư mục có kích thước 170 MB vì ​​các tệp tin lớn Dll. Đây có phải là cách triển khai các ứng dụng Qt hay không. Tôi biết cách của họ là tạo ra một ứng dụng tĩnh độc lập nhưng đó không phải là vấn đề. Tôi ổn với các dll nhưng phụ thuộc dường như quá lớn. Có phương pháp triển khai dự án khác với kích thước tệp nhỏ hơn không?

Cảm ơn

+3

Bạn đã thử phiên bản phát hành của qt dll chưa? –

+0

Vâng, nhưng nó nói: "Thủ tục nhập điểm _Z5qFreePv không thể được đặt trong thư viện liên kết động QtCore4.dll". Sau đó tôi tìm thấy một QtCore4.dll trong thư mục này:/qt/bin và được sử dụng nhưng sau đó nó nói: "Thủ tục nhập cảnh điểm 1QSettings @@ UAE @ XZ không thể được đặt trong thư viện liên kết động QtCore4.dll". – Auxiliary

+4

Tôi nghĩ rằng bạn cần biên dịch ứng dụng của mình ở chế độ phát hành để sử dụng phiên bản phát hành của các dll Qt. – tibur

Trả lời

17

Tại sao bạn không xây dựng bản phát hành và sử dụng tệp phát hành thay vì các tệp dll lỗi lớn hơn nhiều.

Vì đây là liên quan đến kích thước:

gỡ lỗi thư viện

QtCored4.dll = ~ 37MB

QtGui4d.dll = ~ 157MB

phát hành thư viện

QtCore.dll = ~ 2.3Mb

QtGui4.dll = ~ 9MB

(xem các kích thước trong thư mục Qt \ version \ bin của tôi)

+0

Không bắt được điều này trong phần nhận xét của bài đăng gốc trước khi tôi đăng bài này. Nhưng nó là một câu trả lời hợp lệ cho câu hỏi vì vậy tôi tin rằng nó nên đi ở đây ... – radix07

3

bạn có hai vấn đề ở đây: "Không tìm thấy thủ tục nhập điểm"

  • : bạn có nhiều phiên bản của thư viện Qt cài đặt. Không tốt. Bạn đang liên kết chống lại thư viện nhập khẩu A, trong khi thời gian chạy thực thi của bạn tìm thấy một dll B, mà không phải là một trong những bạn liên kết với. Kiểm tra kết xuất dự án của bạn trong khi liên kết để xem thư viện nhập VS nào sử dụng. Giải pháp dễ nhất: xóa/gỡ cài đặt mọi thứ liên quan đến Qt và bắt đầu lại một cách rõ ràng. Điều chỉnh cài đặt dự án của bạn tương tự.
  • không tìm thấy dlls trong thời gian chạy: Giải pháp là để thêm các thư mục với dlls qt để PATH của bạn
+0

Điều đó không giúp được vấn đề phân phối khi bản thân các tệp DLL là 170 MB. –

+0

Tôi biết điều đó; những người khác đã chỉ ra rằng đó là do xây dựng gỡ lỗi, vì vậy tôi đã không lặp lại thông tin đó .. – stijn

+0

"bạn có nhiều phiên bản của thư viện Qt được cài đặt" - Bạn có thể đưa ra giải pháp cho điều đó không. Tôi đang sử dụng QtSDK và tôi có 4.8 4.7 cả hai – Dewsworld

1

Nếu bạn có kế hoạch để triển khai phiên bản liên kết tĩnh của một ứng dụng Qt, bạn nên xem xét việc xây dựng các phiên bản tùy chỉnh các thư viện nơi bạn disable all the features bạn không cần, do đó giảm thiểu kích thước của thư viện.

+5

Liên kết tĩnh yêu cầu phải có giấy phép QtW thương mại thích hợp. – Rob

+1

@Rob: Qt có sẵn dưới LGPL, bạn không cần giấy phép thương mại để liên kết tĩnh với nó miễn là ứng dụng của bạn cũng là LGPL. Tuy nhiên, có rất nhiều vấn đề khác như đã nêu ở đây: http://doc.qt.nokia.com/4.6/deployment.html –