Quá trình này khá tẻ nhạt và tốn thời gian - nhưng tôi sẽ giải thích từng bước chi tiết ở đây vì lợi ích của những người khác cố gắng biên dịch Qt trong tương lai.
Bước đầu tiên là cài đặt tất cả các điều kiện tiên quyết.
- ActivePerl, được sử dụng trong quá trình định cấu hình. Bạn sẽ cần phải khởi động lại sau khi cài đặt Perl vì nó sửa đổi các biến môi trường.
- Windows SDK 7.1 (trước đây được gọi là SDK nền tảng). Hãy chắc chắn bao gồm các thư viện x64 khi bạn chọn các thành phần để cài đặt.
Tải xuống kho lưu trữ nguồn Qt từ Qt Downloads page.
Trích xuất nội dung của tệp lưu trữ sang vị trí dễ nhớ (như C:\
). Bạn cần nhớ vị trí này sau vì chúng ta sẽ sử dụng nó để thiết lập một số biến môi trường.
Bây giờ, hãy mở Dấu nhắc lệnh Windows SDK 7.1. Bắt đầu bằng cách thiết lập môi trường để chế độ phát hành 32-bit (chúng ta cần phải xây dựng một số công cụ như các ứng dụng 32-bit):
setenv /release /x86
Đặt biến môi trường sau đây (ví dụ dưới đây giả sử bạn giải nén vào C:\
):
set QTDIR=C:\qt-everywhere-opensource-src-4.8.0
set PATH=%PATH%;%QTDIR%\bin
Bây giờ chạy cd %QTDIR%
và chỉ định các tùy chọn cấu hình - ví dụ được bao gồm dưới đây:
configure -release -opensource -qt-zlib -qt-libpng -qt-libmng -qt-libtiff
-qt-libjpeg -qt-style-windowsxp -qt-style-windowsvista -platform
win32-msvc2010
Khi quá trình cấu hình đã hoàn tất, cd
vào thư mục src
và chạy:
qmake
nmake
Quá trình này có thể mất một số lượng đáng kể thời gian, vì vậy bây giờ sẽ là một thời điểm tốt để nghỉ ngơi và trả lời một số câu hỏi ở đây trên Stack Overflow :)
Các công cụ này hiện đã được tạo và bạn cần biên dịch Qt làm thư viện 64 bit. Nhập lệnh sau:
setenv /x64
Bạn sẽ cần phải đặt biến môi trường từ bước 5 một lần nữa. Nhập các lệnh đó ngay bây giờ.
Run cd %QTDIR%
và sau đó chạy lại configure
lệnh đang được bảo đảm để xác định thêm một lựa chọn:
configure -release -opensource -qt-zlib -qt-libpng -qt-libmng -qt-libtiff
-qt-libjpeg -qt-style-windowsxp -qt-style-windowsvista -platform
win32-msvc2010 -no-qmake
Tùy chọn -no-qmake
là rất quan trọng - nó chỉ ra rằng chúng ta muốn bỏ qua việc biên soạn chương trình qmake.exe
bởi vì chúng tôi muốn giữ phiên bản 32 bit.
Bây giờ mọi thứ trở nên thực sự phức tạp ở đây vì một số vấn đề phụ thuộc. Các công cụ (như moc
) mà Qt cần xây dựng thư viện lõi và một số thành phần khác được liệt kê dưới dạng phụ thuộc trong tệp src.pro
. Điều này có nghĩa rằng trình biên dịch sẽ cố gắng xây dựng chúng như các ứng dụng 64-bit và sau đó cố gắng chạy chúng - tất nhiên sẽ không thành công trên một hệ thống 32 bit. Vì vậy, những gì chúng tôi cần làm là chỉnh sửa src.pro
và xóa những phụ thuộc đó. Cuộn xuống gần đường 85 và tìm một dòng bắt đầu bằng:
!wince*:!ordered:!symbian-abld:!symbian-sbsv2 {
Mỗi dòng tiếp theo trong phần liệt kê mục tiêu phụ và phụ thuộc của nó. Những gì bạn muốn làm bây giờ là xóa tất cả các phụ thuộc bắt đầu bằng src_tools_
. Ví dụ:
src_gui.depends = src_corelib src_tools_uic
trở thành:
src_gui.depends = src_corelib
Có thể có một cách tốt hơn để làm điều này, nhưng tôi đã không figured it out chưa :)
Bây giờ chúng ta cd
vào src
lại một lần nữa và chạy lệnh sau
nmake sub-winmain sub-corelib sub-xml sub-network sub-sql sub-testlib
sub-gui sub-qt3support sub-activeqt sub-opengl sub-xmlpatterns sub-phonon
sub-multimedia sub-svg sub-script sub-declarative sub-webkit
sub-scripttools sub-plugins sub-imports
Điều này chỉ xây dựng chỉ thư viện Qt và bỏ qua các phụ thuộc của công cụ. Lưu ý rằng quá trình này có thể mất một lượng thời gian đáng kể.
Bây giờ bạn sẽ có thư viện 64 bit trong thư mục lib
mà bạn có thể liên kết trong các ứng dụng Qt 64 bit của mình.
Edit: nó chỉ ra rằng ngay cả điều này là không đủ kể từ khi tôi vẫn còn chạy vào một số vấn đề khi liên kết các thư viện QtWebKit4.dll
(điều gì đó về những biểu tượng chưa được giải quyết). Hóa ra là someone else has already found the solution và bạn cần thay đổi QMAKE_HOST.arch
thành QMAKE_TARGET.arch
trong WebCore.pro
.
Ngoài ra, các tùy chọn ở trên sẽ xây dựng QNetwork4.dll mà không hỗ trợ OpenSSL (bạn sẽ không thể truy cập các trang web qua HTTPS - ngay cả trong QWebView). Điều này, may mắn không phải là quá khó để sửa chữa. Tải về và xây dựng OpenSSL cho Win64 và thêm các tùy chọn bên dưới để lệnh trong bướC# 9:
-openssl -I C:\OpenSSL\inc32 -L C:\OpenSSL\out32dll
(Bạn sẽ phải thay đổi các đường dẫn nếu bạn cài đặt OpenSSL nơi nào khác hơn C:\OpenSSL
.)
Tiếp tục chỉnh sửa: để tiết kiệm những rắc rối để làm điều này bản thân, tôi đã tải lên các thư viện biên soạn ở đây:
http://www.box.com/s/9710cbb278ef4890a7b5
Nguồn
2012-03-03 05:26:23
Tuy nhiên người ta vẫn nói về Qt như đó là thuốc chữa bách bệnh này trong việc phát triển ứng dụng, mà nó đẹp và đơn giản và * dễ dàng *. Tôi chưa thấy bất kỳ bằng chứng nào về điều này. Khi tôi cố gắng làm việc với nó, kết luận của tôi là nó không chỉ đáng giá, đặc biệt khi xem xét rằng một khi bạn trải qua, bạn vẫn không có một ứng dụng hoàn toàn bản địa. –
@CodyGray: Hoàn toàn không đồng ý - tại sao bạn lại phải trải qua nhiều rắc rối khi sử dụng nó? –
@GeorgeEdison: Tôi đang biên dịch ứng dụng Qt của mình với các tệp nhị phân 64 bit đã biên dịch của bạn, nhưng ứng dụng của tôi bị treo. Tôi nghĩ rằng điều này đã làm với thực tế là tôi đã sử dụng một QTableView, mà tai nạn do một lỗi trong trình biên dịch MS Visual C++, xem https://bugreports.qt-project.org/browse/QTBUG-19175 và https: //bugreports.qt-project.org//browse/QTBUG-11445. Bạn đã sử dụng MSVC SP 1 để biên dịch các tệp nhị phân? Tôi đang biên dịch lại Qt 64-bit, nhưng tôi hỏi điều này vì tôi nghĩ rằng các thư viện được biên dịch đã tải lên của bạn có thể hữu ích cho những người khác và do đó, điều quan trọng là chúng không bị lỗi. – yyzz