编译Qt的MySql驱动 _mysql 的makefile需要加什么什么动态库-程序员宅基地

技术标签: qt  function  makefile  mysql  数据库  compiler  

这两天帮一兄弟做毕业设计,其中牵扯到数据库的使用,准备用Qt来做了,对于数据库的选择则是简单的来,就用mysql了,因为说实话:我以前从来没接触过具体的数据库,就知道些书本上的什么select语句。这次也算是全新的小尝试。

     这其中最需要解决的就是两者怎么关联的问题,因为版权的问题:Qt没有提供MySql的对应驱动,而只是给出了源码,所以需要我们自己来编译驱动,这也是最能卡人和最有意思的地方:

在Qt4的assistant上如下说明:

①:You need to get the MySQL installation files. Run SETUP.EXE and choose "Custom Install". Install the "Libs & Include Files" Module.

②:Build the plugin as follows (here it is assumed that MySQL is installed in C:/MYSQL): 
   cd %QTDIR%/src/plugins/sqldrivers/mysql
 
   qmake -o Makefile "INCLUDEPATH+=C:/MYSQL/INCLUDE" "LIBS+=C:/MYSQL/LIB/OPT/LIBMYSQL.LIB" mysql.pro

 

   nmake

 

 基本上照着这个步骤来就是了,但这其中要注意以下几点:

 1:首先安装mysql的时候一定要完全安装,而不能一路next下去,否则编不过去。

2:在执行makefile时:可能会提示说缺少很多mysql的头文件什么的,那这个时候需要添加以下mysql/include路径到环境变量path下,或者直接全部把对应这个文件夹下的头文件都拷贝到VC对应的头文件夹下。

p3:我个人的配置在nmake的时候提示说是:

"fatal error LNK1104: cannot open file 'C:/Program.obj'"

这个问题就很有意思了,查了一下,主要是系统会把你指定的path路径进行修改!

网上有一段解释很经典:

  例如你要加入一个ABC.lib的链接库,完整路径为"C:/Program Files/ABC.lib",
  
如果被IDE改写的话会变成
"C:/Program" "Files/ABC.lib"
  
相应的命令行变成
Link (...) "C:/Program" "Files/ABC.lib"
  
那么链接器会要求提供"C:/Program.obj"文件,由于该文件不存在,所以会
 
  
返回上面的调试信息'LINK : fatal error LNK1104: 无法打开文件  C:/Program.obj'!

       原来都是路径中某个目录名中含有空格的缘故,系统给自动篡改了。我自己电脑上边:包括vc和mysql都是默认安装到了 c:/rogram files/目录下,系统一篡改结果就导致出现了原本不存在的program.obj这么个文件。

     那么解决这个问题便变得简单了,第一种解决办法就是把VC mysql都装到没有空格的目录下,但是我的已经装了;而第二种办法就是想办法把目录中的空格给去掉!方法如下:

     WINODWS系统下:对于一个目录下的若干个文件夹,系统会给他们分配一个短名,这类似于C++中的引用,可以同时用于表示这个文件夹。那么我们只要把这些带空格的文件夹名用起短名代替即可! 而查询一个目录下文件夹短名的order是: dir /x    运行此命令后系统会显示出文件夹名和其对应短名来。

      有了可以替代的短名之后,下一步就是对原先的路径进行修改,而对我这里而言:出错是在nmake这一步,而nmake依据的是makefile,所以我们只要把makefile中对应的长名改成短名即可! 但是我们运行前一步生成的makefile是有makefile.debug和makefile.release两个版本的,我试了下,我电脑上是使用的makefile.release版本,你要是不放心,那就把这两个版本的makefile都进行修改,把其中用到的路径中的长路径名全改成对应的短名(我遇到了两个,一个是program files ,一个是/MySQL Server 5.5/,只要把这两个对应修改即可)。

    处理完上边这个问题,再来重新nmake clean,nmake一下应该就没问题了。当然了如果你用的不是vc的compiler,这里就不再是nmake,可能是make之类的,具体情况具体对待。

    编译成功会生成驱动的库文件,而且会保存在QT的对应系统路径下,我们就不用去管它了,可以直接使用,如果你不放心,那就把他们拷贝到lib文件夹下。

//----------------------------------------------------------------------

    有了驱动,下一步是连数据库,这个网上好多人提供了现成的代码,没有太大难度,呵呵~我当时比较抑郁的是:自己不会用数据库,官网下的mysql是纯粹orderline的,没有图形化工具,这个就很抑郁人了,后来同事推荐用mysql front。我集成了一下,很好用。至此:数据库,数据库图形化操作工具,和QT的链接驱动,QT的对应数据库操作都有了,下一步就是简单的call function啦!

    QT还是可以集成基本上所有主流数据库的,我估计编译驱动的方式大同小异,不会有太大难度。有兴趣可以玩玩,我觉得用这个还是很省劲的。

//-------------------------------------------------------------------

    补充一个很有意思的QT支持中文的问题:在QT里要想直接支持中文,我在网上搜索了很多教程,其中颇多谬误之处,又或者不适合我的情况:

    我公司的电脑是英文版的系统,按照网上所说:首先要调用QTextCodec的static function来设置下tr()的编码格式为GB2312,而后把程序中要用到的中文用tr()包含起来。

    做完这两步,我这还是现实乱码,可能网上的这个教程是对的,不过是针对中文版OS而言,对于英文版OS我测试了一下,还要多做一步才能显示中文:

    要把含有中文字符的这个文件(*.cpp或者*.h)给保存成GB2312格式才行,而系统默认是保存成unicode的。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/douningbo2003/article/details/5406284

智能推荐

SPOJ COT2 Count on a treeII 树上莫队-程序员宅基地

文章浏览阅读275次。ProblemDescriptionYou are given a tree with N nodes.The tree nodes are numbered from 1 to N.Each node has an integer weight. We will ask you to perfrom the following operation:u v : ask for h..._树上莫队

初探docker,docker-compose_docker compose运行本地导入镜像_谢同学谢童鞋的博客-程序员宅基地

文章浏览阅读179次。1、docker 安装以及docker-compose 安装放在另外一篇单独讲。2、docker 常用命令***导入镜像:docker load < mysql.tar***导出镜像:docker save mysql:latest > mysql.tar***查看镜像:docker images***查看容器(在运行的):docker ps -a***删除容器(强制):docker rm -f 容器名/容器id***删除镜像:docker rmi 镜像名/镜像id_docker compose运行本地导入镜像

一文带你直观理解线性变换_线性变换和线性系统的区别-程序员宅基地

文章浏览阅读2.6k次,点赞8次,收藏18次。这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar_线性变换和线性系统的区别

java后端session和cookie_java 后端跟session-程序员宅基地

文章浏览阅读1k次。前言:http是一种无状态的协议,无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。cookie:由于http无状态这个特点,导致了一些麻烦,比如:你登录csdn(当然是比如),每次都要重新输入用户名和密码,这样就很不方便,你刷新一下页面,又叫你登录。针对这个问..._java 后端跟session

git撤销本地文件修改-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏6次。本地的代码修改后,想要放弃本地修改,然后拉取代码。1. 未使用git add 缓存代码使用git checkout -- filename,注意中间有--git checkout -- filename放弃所有文件修改 git checkout .git checkout .此命令用来放弃掉所有还没有加入到缓存区(就是 git add 命令)的修改:内容修改与整个文件删除 此命令不会删除新建的文件,因为新建的文件还没加入git管理系统中,所以对git来说是未知,只需..

蓝桥杯练习系统(入门)-程序员宅基地

文章浏览阅读530次。1 A+Bimport java.util.Scanner;/** * Created by m1786 on 2017/3/3. */public class Main{ public static void main(String args[]){ int a,b; Scanner sc=new Scanner(Sy

随便推点

python 内存泄漏及gc模块的使用_gc object already tracked-程序员宅基地

文章浏览阅读903次。在 Python 中,为了解决内存泄漏问题,采用了对象引用计数,并基于引用计数实现自动垃圾回收。 因为 Python 有了自动垃圾回收功能,不少初学者就认为自己从此过上了好日子,不必再受内存泄漏的骚扰了。但如果查看一下 Python 文档对 __del__() 函数的描述,就知道好日子里也是有阴云的。下面摘抄一点文档内容: Some common situations that_gc object already tracked

2014 Multi-University Training Contest 3 简要题解 by——Fudan University_2014 多校 mart master-程序员宅基地

文章浏览阅读768次。1 Problem A. Endless Punishment1.1 超简要题解我们用0来代表白色,用1来代表黑色,考虑将状态加一维使之齐次,则每个状态可以视为一个n + 1维的向量。这样每一步对应的两种操作就可以用一个异或意义下矩阵来表示。注意到第一个子集一定包含1实质上是说明了矩阵一定可逆。这样我们就可以用类似 BSGS 的方法去做了。 2 Probl_2014 多校 mart master

从Unity到Godot:SceneTree和root-程序员宅基地

文章浏览阅读978次,点赞3次,收藏2次。Unity中没有SceneTree和root,刚接触Godot的时候我总是搞混这两个概念SceneTreeroot类型SceneTree>MainLoop>Objectroot就是一个Viewport,只不过它在最顶部作用通过节点树管理整个游戏循环根视口获取方式Node.get_tree()SceneTree.root小结...

Python|动态规划问题--斐波那契数列_python下面程序用动态规划法快速计算斐波那契数,在下划线处填上正确的表达式-程序员宅基地

文章浏览阅读689次。欢迎点击「算法与编程之美」↑关注我们!本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。欢迎加入团队圈子!与作者面对面!直接点击!斐波那契数列斐..._python下面程序用动态规划法快速计算斐波那契数,在下划线处填上正确的表达式

DSP/BIOS的搭建_dsp bios 新建步奏-程序员宅基地

文章浏览阅读4.9k次,点赞12次,收藏51次。CCSv5.2中DSP/BIOS的搭建_dsp bios 新建步奏

Objective-C语言概述及语法初体验_objective-c语言概述与应用分享-程序员宅基地

文章浏览阅读1.3k次。一、Objective-C(以下简称OC)简介 Objective-C 是在 C 的基础上,加入面向对象特性扩充而成的通用型高级编程语言,也写作 ObjC 、Obj-C 和较少用的 Objective C。Objective-C主要应用于 Mac OS X 和 iOS 系统及其相关 API 如Cocoa、Cocoa Touch。Objective-C 最_objective-c语言概述与应用分享