2012-03-03 11 views
9

Tôi đang cố gắng biên dịch thư viện Qt (Tôi không cần trình diễn hoặc ví dụ) cho Windows 64 bit. Có hướng dẫn here nhưng tôi chạy vào lỗi được mô tả trong bình luận bên dưới nó. Có vẻ như không phải là một tài liệu tham khảo bất cứ nơi nào để làm thế nào người ta có thể đi về làm quá trình này.Làm cách nào để biên dịch Qt cho Windows 64 bit từ môi trường 32 bit bằng Visual C++ 2010 Express?

Tôi đang nhắm mục tiêu Microsoft Visual C++ 2010 Express. Có vẻ như tôi cũng cần Perl và Windows SDK - làm cách nào để tôi thực hiện quy trình này?

Trả lời

14

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.

  1. 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.

  2. Tải xuống kho lưu trữ nguồn Qt từ Qt Downloads page.

  3. 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.

  4. 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 
    
  5. Đặ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 
    
  6. 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 
    
  7. 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 :)

  8. 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ờ.

  9. 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.

  10. 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 :)

  11. 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ể.

  12. 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

+1

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. –

+0

@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ó? –

+0

@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

1

Như tôi đã đề cập trong các ý kiến ​​để trả lời George Edison, có một lỗi trong trình biên dịch Microsoft Visual C++ đi kèm với Windows SDK 7.1. Để biết thêm thông tin về điều này, hãy xem QTBUG-11445QTBUG-19175.

Tôi đã biên dịch các tập tin nhị phân Qt 4.8.2 64 bit theo hướng dẫn của George, bao gồm cả thư viện OpenSSH. Ngoài ra, tôi đã áp dụng Microsoft's hotfix để sửa lỗi trình biên dịch.

Để tiện cho bạn, tôi đã thực hiện các kết quả thư viện 64-bit sẵn để tải về từ đây: https://www.box.com/s/8948c60c3cdd743ef83b

+0

Tôi cũng phải đối mặt với cùng một vấn đề tương thích sau đó tôi đã cài đặt SDK 7.0 và tham chiếu phương pháp này và phương thức hoạt động của nó cho tôi http://qtitkvtkhelp.blogspot.in/2013/04/qt-64-bit-build.html –