簡體   English   中英

使用動態鏈接在Linux上交叉編譯Windows的Qt應用程序

[英]Cross compiling Qt application for Windows on Linux with dynamic linking

為了符合Qt的LGPL許可證,使用Qt庫的應用程序必須使源代碼可用或動態鏈接到Qt(如果我用這幾個字正確地得到了它)。

所以我想創建一個完全正確的閉源應用程序。 另外,我想在Linux(目前是Xubuntu 12.04)上使用支持C ++ 11的g ++ / MinGW來開發Windows二進制文件。 我按照這個有用的指南來完成后者。 但正如指南還指出的那樣,創建了靜態鏈接的可執行文件。

由於我使用MXE自動下載和構建Qt庫(版本5.0),因此我沒有太多機會影響該過程。 所以我的問題是,如何創建Qt庫和相應應用程序的動態鏈接版本?

更新

現在,使用MXE構建動態版本庫的首選方法是為工具鏈指定“共享”選項:

make MXE_TARGETS=i686-w64-mingw32.shared qt5

原版的

編輯:我已經創建了一個git存儲庫,我已經完成了對MXE的所有必要更改以構建qtbase的共享版本。 它可以在https://github.com/jeremysalwen/mxe上找到 要構建,克隆存儲庫,然后運行'make qtbase'。 我把原來的帖子留在了下面。

所以我下載了mxe環境,看起來使用的代碼編譯qt在src / qt.mk中是有幫助的

基本過程是將此代碼與構建qt的標准方向相匹配。 如果你查看qt.mk和qtbase.mk,你會發現它實際上非常簡單,基本上只運行./configure,make,然后安裝生成的文件。 如果你可以看一下,你應該能夠匹配靜態/動態構建qt的方向,並修改qt.mk以使其與動態方向匹配。

無論如何,我想我已經找到了這個問題。 編譯qt時看起來差異是“-static”標志。 因此,如果我們只是刪除在qt.mk和qtbase.mk中傳遞給./configure的“-static”標志,我希望mxe會構建一個動態的qt版本。 當然,您可能需要更改其他內容,但希望這就是您需要做的所有事情。

首先,你需要設置葡萄酒。

sudo apt-get install wine

然后下載Qt5 Windows MinGW SDK Run with wine

wget http://releases.qt-project.org/qt5/5.0.1/qt-windows-opensource-5.0.1-mingw47_32-x86-offline.exe
wine qt-windows-opensource-5.0.1-mingw47_32-x86-offline.exe

按照向導安裝Qt。 然后

cd ~/.wine/drive_c/Qt/Qt5.0.1/Tools/QtCreator/bin
wine qtcreator.exe

我嘗試了qtcreator中的示例,它在linux下編譯並運行良好,當我將exe文件復制到設置了Qt的Windows機器時,它也運行良好。

當然,一個缺點是你沒有使用qtcreator和使用wine的編譯器。 我不知道它與原生linux二進制文件相比有多慢。 但是jom是可用的,如果您的項目很大,您可以使用多個內核進行編譯。

要在qtcreator中使用jom而不是make,請在qtcreator中進行修改。

projects > Build & Run > Build > Build Steps > Make

替換為jom並添加make參數-j N其中N是您要使用的核心數字。

我最近一直在磕磕絆絆,並發現octave的mxe分叉取得了一些成功。 他經歷了麻煩,用共享(.dll)庫支持來構建qt,滿足了我的需求。 這是他的帖子鏈接

您需要為動態鏈接構建QT。 如果您為靜態鏈接(通常是Linux中的.a文件)構建了QT,那么您的二進制文件將是靜態的。 如果你在linux中構建共享對象文件(.so),你的二進制文件將動態鏈接。 您還需要在應用程序中包含相關的.dll,以便當其他人運行可執行文件時,它可以訪問這些庫。

qt-project.org的QT SDK包含動態鏈接文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM