我已经构建了一个使用MySQL库的Qt应用程序,但我对静态与共享构建的文档感到困惑。
在http://doc.qt.nokia.com/4.7/deployment-windows.html的Qt文档中,它说:
要部署基于插件的应用程序,我们应该使用共享库 方法
在http://doc.qt.nokia.com/4.7/deployment.html上,它说:
静态链接会生成独立的可执行文件。优点是 你只需要部署一些文件。缺点是 可执行文件很大,没有灵活性,而且你 无法部署插件。要部署基于插件的应用程序,您可以 使用共享库方法。
但在http://doc.qt.nokia.com/latest/plugins-howto.html上,它似乎反过来说明如何使用静态插件的指示:
插件可以静态链接到您的应用程序。如果你 构建Qt的静态版本,这是包含的唯一选择 Qt的预定义插件。使用静态插件进行部署 不容易出错,但缺点是没有功能 可以添加插件而无需完全重建和重新分发 应用程序。 ...要静态链接这些插件,你 需要在您的应用程序中使用Q_IMPORT_PLUGIN()宏 需要使用QTPLUGIN将所需的插件添加到您的构建中。
我想静态构建Qt库(为了便于部署),然后使用静态MySQL插件。为此,我没有使用Windows的二进制distrubtion。相反,我开始使用源qt-everywhere-opensource-src-4.7.4 以下是进行静态构建的正确方法,以便我可以使用静态MySql插件吗?
configure -static -debug-and-release -opensource -platform win32-msvc2010 -no-qt3support -no-webkit -no-script -plugin-sql-mysql -IC:\ MySQL \ include -LC:\ MySQL \ LIB
这应该静态构建Qt库并在运行时链接静态插件,对吗?我不需要单独从源代码构建Mysql插件,对吗?
如果我在上面为“-plugin-sql-mysql”替换“-qt-sql-mysql”,它会直接在QT静态库中包含MySQL驱动程序,在这种情况下我不会需要使用插件,对吗?
谢谢你让我失败!
答案 0 :(得分:2)
你的第二句话的页面应该说明:
静态链接会生成独立的可执行文件。优点是您只需要部署一些文件。缺点是可执行文件很大且没有灵活性,您无法部署插件。
要部署基于插件的应用程序,您可以使用共享库方法而不是。
你对两端的假设是正确的。例如,我们的qt版本的配置包括
-plugin-sql-oci -qt-sql-sqlite
和plugins \ sqldrivers目录只显示qsqloci(d).lib但没有sqlite相关。