14

为了遵守 Qt 的 LGPL 许可证,使用 Qt 库的应用程序必须使源代码可用或动态链接到 Qt(如果我在这几句话中理解正确的话)。

所以我想创建一个闭源应用程序来做到这一点。此外,我想在 Linux(目前是 Xubuntu 12.04)上使用支持 C++11 的 g++/MinGW 来创建 Windows 二进制文件。我按照这个有用的指南来完成后者。但正如指南还指出的那样,创建了静态链接的可执行文件。

由于我使用 MXE 自动下载和构建 Qt 库(版本 5.0),因此我没有太多机会影响该过程。所以我的问题是,如何创建 Qt 库和相应应用程序的动态链接版本?

4

4 回答 4

10

更新

现在,使用 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 版本。当然,您可能需要更改其他内容,但希望这就是您需要做的所有事情。

于 2013-02-20T09:37:39.977 回答
5

首先,您需要设置葡萄酒。

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 arguments -j N 其中 N 是您要使用的核心编号。

于 2013-04-01T05:55:35.380 回答
2

我最近一直在磕磕绊绊,并发现octave 的 mxe 分支取得了一些成功。他不辞辛劳地构建了具有共享(.dll)库支持的 qt,满足了我的需求。这是他的帖子的链接

于 2013-03-27T21:29:09.287 回答
0

您需要为动态链接构建 QT。如果您为静态链接构建了 QT(通常是 .a 文件在 linux 中),您的二进制文件将是静态的。如果您在 linux 中针对共享对象文件 (.so) 构建,您的二进制文件将被动态链接。您还需要在应用程序中包含相关的 .dll,这样当其他人运行可执行文件时,它就可以访问这些库。

来自 qt-project.org 的 QT SDK 包含动态链接的文件。

于 2013-02-20T06:02:27.030 回答