Chinaunix首页 | 论坛 | 博客
  • 博客访问: 949667
  • 博文数量: 101
  • 博客积分: 110
  • 博客等级: 民兵
  • 技术积分: 1842
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-24 13:26
个人简介

专注linux

文章分类

全部博文(101)

文章存档

2017年(2)

2016年(12)

2015年(17)

2014年(41)

2013年(27)

2012年(3)

分类: C/C++

2013-12-08 20:18:32

       最近在为公司做一个系统,之前成功编译了数据库驱动,速度写一段Qt&MySQL的程序测试一下。在本地顺利编译执行,编译Release版,发布到其他电脑,运行,无法加载驱动(driver not loaded)。。。。。首先想到,刚编译的MySQL数据库驱动和编译驱动时用到的libmysql.dll没有Copy,速度Copy一下到其他电脑的Release版目录里,运行,还是弹警告对话框。。。哭,只好找度娘了。。。原来解决起来还是蛮简单的。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

帮同学做的毕业,这两天一个很大的问题困惑的我不行。毕设我是用qt + mysql来做的。结果在自己电脑上跑起来很正常,但是编译一个release版本,拿到另外一台电脑上就报错说:can't load driver 。  试图去解决这个问题,今天总算搞定,这里总结一下。

     首先需要说明的是:我用的是qt for vc2005,qt4.5.0 mysql server5.5

    

     整个流程:

     1:首先我编译了一个release版本,而后用dependency walker查看了下库的依赖情况。发现依赖于:QtSql4.dll,QtGui4.dll,QtCore4.dll,msvcr80.dll以及 KERNEL32.DLL这几个库。其中最后一个是system的,我们不用去管,剩下的这几个显然都需要拷贝到exe同目录下。  尤其是msvcr80.dll,我在我电脑上搜了一下:有多大10几个同名的该文件,所以拷贝哪个是很重要的,此时我们只需要在dependency walker查看这个dll的属性,然后去对应目录底下拷贝就行了。  所以:第一步就是把这些依赖库拷贝到exe同目录下。(千万不要拷贝错误,尤其是不同的版本)。

 

     2:做完1之后再次运行,提示:找不到驱动。 问了一下别人,告之需如下做:

         ①:首先在exe同目录下建一个plugins/sqldrivers这样的二级目录,而后将前边编译生成的qt-mysql驱动:qsqlmysql4.dll放到里边。

         ②:而后在main.cpp中加上如下两句:

QString strLibPath(QDir::toNativeSeparators(QApplication::applicationDirPath())+QDir::separator()+

"plugins");

qApp.addLibraryPath(strLibPath);

 

       做完这两部之后:按理应该没问题了,但是run一下发现:还是提示驱动找不到。。 。。

 

    3:再后来,上网查了一下各种说法,发现几种可能性:①你要发布的电脑上没有安装mysql  ②mysql版本不对。  我就纳闷了:找不到驱动与装没装mysql有什么关系?毕竟:驱动是我自己编译的,又不是mysql提供的。  问了下别人,别人也这么认为。然后就卡在这里了。  我不死心,继续在网上寻找各种可能的答案并进行尝试。最后找了问题,原来:我们需要把mysql提供的:libmySQL.dll这个库拷贝到exe同目 录下(该文件在我自己电脑上处于:C:/Program Files/MySQL/MySQL Server 5.5/bin文件夹下)。如此之后再来运行就不再报:找不到驱动这个错误啦!(此时报的是:连接不到某个指定的数据库,那是因为我还没有把数据库文件导 入到目标机器上来)。

 

     ==========================================================================

 

    总结:在其他pc上发布的时候需要做如下工作:

    1:使用depenency walker查看依赖库,全部拷贝到exe同文件夹下。

    2:①:在exe同目录下建一个plugins/sqldrivers这样的二级目录,而后将前边编译生成的qt-mysql驱动:qsqlmysql4.dll放到里边。

       ②:而后在main.cpp中加上如下两句:

QString strLibPath(QDir::toNativeSeparators(QApplication::applicationDirPath())+QDir::separator()+

"plugins");

qApp.addLibraryPath(strLibPath);

    3:将mysql/bin目录下的libmySQL.dll拷贝到exe同目录下。

 

     做完以上几步之后就OK了。

===========================================================================

     至于最后所报的连接不到指定的数据库,原因是这样的:

     在开发的电脑上:你建了一个mysql数据库,那么我们需要把这个数据库文件也拷贝到目标机器上,并在目标机器上装mysql,而后将这个数据库文件导入 进去。 导入之后你会发现:各字段的数据有可能出现乱码,这是由于各个字段的编码格式在开发机器和目标机器上不一致 导致的! 你需要按照开发机器上的数据库文件配置来重新设置一下目标机器的各个字段编码格式。

    

     而在目标机器上导入数据库文件的方法是:(以建立的数据路名为buaa.sql为例)

     1:在目标机器上装mysql

     2:命令行运行mysql,进入后执行命令:create database buaa;

     3:导入buaa.sql到刚创建的buaa数据库中。(我用的mysql-front这个数据库图形化工具)。

 

 

     测试: Qt4.5.0commercial  + vc2005 express + mysql5.5 +mysql-front +windows xp

 

(网上很多人说:找不到驱动是因为目标机器上没有安装vc运行时库的原因,但 是我这里没有遇到这个问题:我测试的电脑没有任何vc环境,没有任何qt环境,也没有安装windows sdk。  但是如果大家按照我上边的方法测试发现有问题时:可以考虑在目标机器上安装vc运行时库试一下。它分sp1版本和 非sp1版本,你对应主机的vc版本选择一个安装就是。)

阅读(13336) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~