2010-10-20 44 views
2

我已经编写了一个开源程序,我已经使用Qt4 LGPL SDK构建了GPL。该程序能够搜索可选的Sqlite3数据库中的数据。Qt4程序崩溃,除非安装了SDK

这是什么让我失去理智。我在开发机器上编译程序。当我尝试运行它时,我可能会遇到关于缺少DLL的错误。我将这些DLL复制到与可执行文件相同的目录中,现在它可以正常工作(mingwm10.dll,libgcc_s_dw2-1.dll,QtCore4.dll,QtSql4.dll,QtGui4.dll),包括数据库搜索。

现在,如果我将该文件夹与可执行文件和DLL复制到未安装SDK的新计算机上,它运行良好,直到我尝试搜索。当我点击搜索按钮,我会出现以下错误:

Title: Microsoft Visual C++ Runtime Library 
Runtime Error! 
This application has requested the Runtime to terminate it in an unusual way. 
Please contact the application's support team for more information. 

然后我下载并安装SDK,什么也不做,我现在可以运行程序和搜索文件sqlite3的就好了!

我错过了什么魔法?

P.S.这两台机器都是新安装的Windows XP系统。

回答

2

您可能有一些libs或Qt插件未部署到目标机器。它很可能是SQL驱动程序插件。以下是关于它的一些信息:http://doc.trolltech.com/latest/deployment-windows.html#qt-plugins

您需要将所需的Qt插件复制到可执行文件旁边的目录中。并添加这样的事情在你的main()

QApplication::addLibraryPath(QCoreApplication::applicationDirPath() + "/plugins"); 

(编辑链接,添加的代码)

+0

而你需要http://www.dependencywalker.com/ – 2010-10-20 23:00:44

+0

我想你已经打,就在这里。我需要的插件是qsqlite4.dll。我怎么使用它?我是否需要将代码添加到我的程序中以明确加载它?我一直在把它放在不同的地方,并添加一个qt.conf文件超过一个小时没有运气。 – Kyle 2010-10-21 11:50:47

+0

@凯尔:我编辑了我的答案,我认为会起作用。 – 2010-10-21 13:49:17

0

我发现这个问题。

Stephen Chu正确的是我错过了sqlite驱动。但是,我可以一路走上更多复杂情况。

SDK附带两套dll。一组驻留在$ BASEDIR/bin中,另一组驻留在$ BASEDIR/qt/bin中。前者包含Qt Creator使用的dll,而后者则是您希望随可执行文件一起提供的dll。

我需要采取sqlite插件(qsqlite4.dll)并将其复制到APP_DIR/sqlplugins。我的问题是我使用错误的qsqlite4.dll文件。

非常感谢大家对这个问题的贡献。

以供将来参考,这个问题也被这里讨论:http://www.qtforum.org/article/34639/qt4-program-crashing-unless-sdk-installed.html

+0

刚解决了这个问题。 qsqlite4.dll插件的版本是问题。它**不能超过你正在使用的Qt库(参见[qt的文档](http://qt-project.org/doc/qt-4.8/deployment-plugins.html#loading-and-动态验证插件):_Qt 4.3.0不会加载使用Qt 4.3.1_构建的插件)。为我们工作的目录结构是'APPDIR/sqldrivers/qsqlite4.dll'。 – 2012-05-24 19:52:28