微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

QtSql应用程序不能在部署的机器上工作

我在Qt / C ++中做了一个软件。 我需要将它部署在Windows 7(64位)上,这也是我开发软件的主机。

问题是我的软件可以与开发的机器上的sqlite数据库进行交互,但是当我尝试在其他机器上部署我的软件时,它不能与数据库交互。 我试图使用“以pipe理员身份运行”,但它没有帮助。 我也尝试使用兼容模式。

数据库位于C:UsersusernameDesktopdb1.sqlite ,因此我的软件无需联网或互联网即可正常运行。

我还用我的软件包括了QtGui4 , QtCore和Qtsql4 dll。

调整POSIX共享内存。 一个工作的例子

运行用MinGW编译的程序时有没有办法生成gdb可读的coredump?

DPI意识是真的需要?

在哪里放普通的可写应用程序文件

处理退出和对线程的影响

有人能指出什么可能会出错吗?

mount()和jffs2_gcd_mtd0垃圾回收器

在Windows应用程序中是否有任何基于SSRS的商业产品可以提供更丰富的用户体验?

在linux中编译文件并在Windows中运行

.NET Charting图例标记大小

Linux包含在Windows(ioctl等)

对,在提供解决方案之前,有几件事要讨论,即:

1)当您在Windows机器上开发软件时,它的工作方式像一个魅力,但不是在您已部署软件的机器上,首先要检查的是依赖关系。 他们都正确运输?

我将如何去检查它? 那么,这是免费提供的依赖步行者的目的。 您必须在部署软件的机器上运行; 换句话说,在部署之后。 如果它在那里工作,不要在开发机器上运行它。 好,这是关于调试,所以让我们得到具体的Qt …

2)您正在使用Qtsql模块来处理Qt应用程序中的良好数据库交互。 但是,主要的动态库,又名。 Qtsql4.dll是关于抽象的功能。 也就是说,所有的Qt代码并不涉及具体的驱动程序本身。

你可以问为什么这样做? 原因是比较直接的,因为Qtsql模块提供了一个抽象接口,应该可以在不用重建和重新部署软件的情况下即时更改数据库存储机制。 如果最终用户决定在某一天使用另一个数据库呢? 这是不可能的。

对,我们正在接近这个被称为插件架构的通用设计原则。 Qt项目在这里有关于它的文档。 现在,我们已经非常接近解决方案,所以让我们进一步走到最后。

3)这可能是“太长了;不要读”部分:当你部署你的应用程序时,你需要让最终用户也拥有插件。 这意味着,您需要在这种情况下发送两种类型的sqls,Qtsql4.dll以及特定的驱动程序插件。 你显然错过了以后。 因此,准备运送。 但是,第二,对吗? 好的,所以你似乎正在使用sqlite和Qt 4,所以你将需要得到的sqlite的Qt 4驱动程序。

你可以自己在这里查看Qt sql数据库驱动程序:

sql数据库驱动程序

根据你正在使用的sqlite版本,你有两个选择:

QsqlITE2 sqlite版本2

QsqlITE sqlite版本3

基本上,如果你必须这样做,你将如何自己构建驱动程序:

cd %QTDIR%srcpluginssqldriveRSSqlite qmake "INCLUDEPATH+=C:/sqlITE/INCLUDE" "LIBS+=C:/sqlITE/LIB/sqlite3.LIB" sqlite.pro nmake

一旦你有了这个DLL,我相信你已经做了,如果你已经在Windows上的程序工作,将qsqlite4.dll $ QTDIR plugins sqldrivers复制到您的应用程序,可执行文件旁边的sqldrivers目录。 它会被自动拾取,然后Qt没有任何麻烦,除非你手动弄乱你不应该做的路径。

4)这就是说,这是一个完全通用的方法,所以这将适用于任何sql类型,如果你替换你需要的sqlite。

您还应该将qsqlite4.dll放在一个名为sqldrivers的目录中,以及应用程序可执行文件的发行版本中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐