Rat*_*ker 14 qt cross-compiling dynamic-linking qt5 mxe
为了符合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
Run Code Online (Sandbox Code Playgroud)
原版的
编辑:我已经创建了一个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版本.当然,您可能需要更改其他内容,但希望这就是您需要做的所有事情.
首先你需要进行 wine 设置。
sudo apt-get install wine
Run Code Online (Sandbox Code Playgroud)
然后下载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
Run Code Online (Sandbox Code Playgroud)
按照向导安装 Qt。然后
cd ~/.wine/drive_c/Qt/Qt5.0.1/Tools/QtCreator/bin
wine qtcreator.exe
Run Code Online (Sandbox Code Playgroud)
我尝试了qtcreator中的示例,它在linux下编译并运行良好,当我将exe文件复制到安装了Qt的Windows机器时,它也运行良好。
当然,一个缺点是使用 qtcreator 和使用 wine 的编译器感觉不是原生的。我不知道它比原生linux二进制文件慢了多少。但是jom是可用的,如果你的项目那么大,你可以利用多个核心来编译。
要在qtcreator中使用jom而不是make,请在qtcreator中修改此处。
projects > Build & Run > Build > Build Steps > Make
Run Code Online (Sandbox Code Playgroud)
替换为 jom 并添加 make 参数 -j N,其中 N 是您要使用的核心编号。
小智 1
您需要构建 QT 来进行动态链接。如果你有为静态链接构建的 QT(通常是 linux 中的 .a 文件),你的二进制文件将是静态的。如果您在 Linux 中针对共享对象文件 (.so) 进行构建,则您的二进制文件将被动态链接。您还需要在您的应用程序中包含相关的 .dll,以便当其他人运行可执行文件时,它可以访问这些库。
qt-project.org 中的 QT SDK 包含动态链接的文件。
| 归档时间: |
|
| 查看次数: |
7105 次 |
| 最近记录: |