Linux下QT平台Mysql数据库开发环境配置
This doucment is about how to add mysql driver into QT and about database connections
由于之前安装RedHat的时候是自动选择安装了mysql数据库以及QT designer,这一阵子用它的时候却因为它在数据库连接中遇到了很大的困难。
问题的出现:
首先想测试一下数据库的连接:选择Projects-->database Connections,弹出一个Edit Database connections的对话框,点击New connection,在右边出现可编辑的选项,以下是配置:
Name: default
Driver:点击下拉框,没有反应,于是我就按照QT Assistant上说的填上QMYSQL3
我的数据库名先使用自带的mysql
Database Name:mysql
User name: root
Passworld: ********(填上自己设置的密码)
Host name: mscl
然后就单击connect 按钮,弹出
can't not connect to the database
Please ensure that the database server is running and that all connection information is correct,[Driver not loaded]
郁闷了很久,究竟驱动是出在什么问题上,google了又百度了半天没有什么头绪,起始还以为是Mysql数据库的问题,于是将原来用RPM安装的Mysql数据库删了,重新到到www.mysql.com社区中下载了个二进制的压缩包mysql-5.0.45-linux-i686.tar.gz,其本上解压出来就可以用了,启动了服务器,重新按上面的设置进行连接,但是还是出现原来一样的问题,于是就想如果QT真的是支持MySQL驱动的话,应当在driver的下拉框中可以看得到的,于是将问题怀疑到Qt的驱动中。
在网上看了一些关于编译mysql驱动的文章,自己也阅读了Assistan中的关于编译mysql驱动的部分,其原文是这样的:
How to build the plugin on Unix/Linux
You need the MySQL header files and as well as the shared library libmysqlclient.so. Depending on your Linux distribution you need to install a package which is usually called "mysql-devel".
Tell qmake where to find the MySQL header files and shared libraries (here it is assumed that MySQL is installed in /usr/local) and run make:
cd $QTDIR/plugins/src/sqldrivers/mysql
qmake -o Makefile "INCLUDEPATH+=/usr/local/include" "LIBS+=-L/usr/local/lib -lmysqlclient" mysql.pro
make
于是我就找到QT3的安装目录(我的是在/usr/lib/qt 3.3/plugins),但是我的却没有src/sqldrivers/mysql目录,没有mysql驱动的源代码,编译MySql驱动就无从谈起,于是又去google看一下有没有mysql在Qt中的驱动的源代码,搜了一个晚上,边条毛也没有看到,很晚了就先睡了,究竟还有没有其它的办法?(周公寻梦)。。。
早上8点起床,继续吧!
突然起了重新装一个QT的想法,没有办法了只好试了一下,到IT68中下了个QT3.1版本的,12来M吧,然后就开始安装:
1.选择安装路径
shell>cd /usr/local
2.解压下载的安装包 (版本号不同,下面的编译过程可能不同,以源目录下的INSTALL文件为准)
shell>tar -jxvf qt-x11-free-3.1.2.tar.bz2
3.设置环境变量(后来发现这一部分可以不用,因后在后面的.login中已经设置好了)
在我的/etc/bashrc中添加如下几行:
QTDIR=/usr/local/qt :安装的根目录
PATH=$QTDIR/bin:$PATH :可执行文件目录
MANPATH=$QTDIR/doc/man:$MANPATH :man文档目录
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH :库文件的目录
如果你的安装路径不是跟我的一样,一定要设成相应的。
4.配置configure脚本
我这里选用的都是默认配置所以只输入
shell> ./configure
如果你想改变安装的路径,或者是选择安装的库文件及头文件的位置,可以使用下面的选项
./configure -libdir /usr/local/lib -bindir /usr/local/bin -headerdir /usr/local/include/qt
这样你的QT的库文件,头文件目录就在相应的目录下了,但是记住你如果在这里进行了设置也一定要在第三步中的环境变量中进行相应的发动。还有一个--prefix选项,该选项设置 qt 安装的目的目录
5.编译
shell> make
这需要比较长的时间,我的机子配置是CPU 速龙1.8G,1G内存大概用了20来分钟。
在编译过程中出现了一个错误,忘了记下来了,大概就是说在fbm.c中noise3是静态的,但是在fbm.h中的声明是却是非静太的,在examples/demo/opengl下找到这两个文件,将fbm.h中的float noise3(float vec[])最前面加入static,保存。继续键入make.
6.安装
shell> make install
this process also take serval minutues,so you should be patient.
7.安装完毕后,我找到bin目录下,运行designer,TMD果然行了,一个QT界面慢慢地展现在我的面前。
把QT安装完成后,发现新安装的QT比原来的系统自带安装的多了几个目录:config.tests,doc,examples,extensions,pics,qmake,src,tools,tutorial,还多了十来个文件,当然最重要的是在plugins多了sqldrivers(这个目录之前是空的,只有在编译之后才有一个二进制文件:libqsqlmysql.so),还有就是src目录。
好了,终于有了qt下的mysql驱动源码,接下来就按照Qt Assistant中说的办法编译它:
shell> cd usr/local/qt/plugins/src/sqldrivers/mysql
shell> qmake -o Makefile "INCLUDEPATH+=/usr/local/mysql/include" "LIBS+=-L/usr/local/mysql/lib - lmysqlclient" mysql.pro
第2个命令就是生成Makefile文件,并将头文件及库文件的目录添加到选项LIBS,INCLUDEPATH中。其中我的mysql是安装在/usr/local/mysql下
下面就是编译了,还是在原来的目录下
shell> make
到些驱动编译完了,我到QT designer 下看一下可不可以识别这个驱动。
1. 启动designer
[root@mscl bin]# /usr/local/qt/bin/designer
2.还是按照前面的设置database connections
Name: connect_test(我给这次连接起了个名)
Driver:点击下拉框,这时与前面不同的是,我可以看到QMYSQL3(^_^)
数据库名还是使用mysql
Database Name:mysql
User name: root
Passworld: ********(填上自己设置的密码)
Host name: mscl
然后就单击connect 按钮,可以在左边的列表中看到我设置的这次连接的名字connect_test,花了两天多终于把它给给连接上了。
----------------------------------------------------------------------------------
下面是编写代码来测试数据库,代码的内容基本是从Qt Assistant拷贝的:
1. 部分代码
void Form1::init()
{
createConnection();
}
bool Form1::createConnection()
{
// create the default database connection
QSqlDatabase *defaultDB = QSqlDatabase::addDatabase( "QMYSQL3" );
if ( ! defaultDB ) {
qWarning( "Failed to connect to driver" );
return FALSE;
}
defaultDB->setDatabaseName( "mysql" );
defaultDB->setHostName("mscl");
defaultDB->setUserName( "root" );
defaultDB->setPassword( "39323286" );
// defaultDB->setHostName( "bookhost" );
if ( ! defaultDB->open() ) {
qWarning( "Failed to open database: " +
defaultDB->lastError().driverText() );
qWarning( defaultDB->lastError().databaseText() );
return FALSE;
}
return TRUE;
}
2. 编译
[root@mscl mscl]# qmake -o Makefile dbcon.pro(my project name)
[root@mscl mscl]# make
3. 运行
[root@mscl mscl]# ./dbcon
出现错误说找不到can't load library 'libqt.so.3',记在在QT的源文件的安装说明中有这样的一句话,到Qt 的安装目录lib下看到这是一个符号链接,本来还想把它拷贝到/usr/lib中去解决,但是连接拷贝了也是没有用的,在lib目录下又没有真正的库(也许我找不到)。
解决办法:在/root/目录下创建一个名为(.login)文件(具体的请参照QT中的INSTALL),然后在这个文件中添加以下的变量:
setenv QTDIR /usr/local/qt
setenv PATH $QTDIR/bin:$PATH
setenv MANPATH $QTDIR/doc/man:$MANPATH
setenv LD_LIBRARY_PATH $QTDIR/lib:$LD_LIBRARY_PATH
添加完毕之后,一定要重新启动计算机。我在重新启动之后到/root目录下看了一下原来的那个.login文件名已经变量了另外一个文件qt.log~,而且还是隐藏的,但是内容还是一样的。
最后我重新运行这个可执行文件,没有出现上面的问题了。但有新问题。
[root@mscl mscl]# ./dbcon
./dbcon: error while loading shared libraries: /usr/lib/libmysqlclient.so.15: cannot restore segment prot after reloc: Permission denied
这里说明一下,由于之前我在运行的时候也出现了找不到库文件libmysqlclient.so.15,我就到/usr/local/mysql/lib下找到这个文件,由于它不是个链接,于是我就直接把它拷贝到了/usr/lib目录下,之后就没有出现问题,但是现在又出现了一个新的问题。于是自己又想是不是访问的权限不够,右击它,将它赋于读写的权限,但是没有用还是老问题。
此时我注意到我的电脑的右上方出现了一个五角星,哈哈,按照以往相似的经验,知道点击它里面肯定有解决方案,果不出我所料,原来SELinux阻止了程序加载libmysqlclient.so.15这个库,因为需要代码的重定位。在Allow Access标签下有下面的一段话:
The following command will allow this access:
chcon -t textrel_shlib_t /usr/lib/libmysqlclient.so.15
照做吧:
[root@mscl mscl]# chcon -t textrel_shlib_t /usr/lib/libmysqlclient.so.15
[root@mscl mscl]# ./dbcon
^_^ ^_^ ^_^,终于正常地弹出了测试的窗口,至此有前QT的数据库部分已经基本搞好了。
一些待解决的问题:有什么办法让QT直接到/usr/local/mysql/lib下找libmysqlclient.so.15,这样我就不用把它拷贝到/usr/lib目录下了,就你libqt.so.3一样?慢慢来吧
12.6号将上面的这个问题解决了,解决方法:
在/etc/ld.so.conf文件下我们可以看到它的内容为:
include ld.so.conf.d/*.conf
因此它将根据/etc/ld.so.conf.d目录下的conf文件来查找动态库(后缀为.so),所以我们可以在这里建立一个conf文件,将我们的mysql动态链接库路径告诉系统,内容为:
/usr/local/mysql/lib
保存,然后运行ldconfig命令,因此此时系统要求动态库要为一个链接符号,而我的/usr/local/mysql/lib下的libsqlclient.so.15并不是一个链接,此时SELinux阻止了应用程序加载这个动态库,为了解决这个问题,我们可以运行下面这个命令:
chcon -t textrel_shlib_t /usr/local/mysql-5.0.45-linux-i686/lib/libmysqlclient.so.15
最后就OK了。
差点给忘记了,重启启动后,我原来安装的Qt 3.3.6版本的Qt 被刚编译的Qt 3.1替换了(指Applications菜单下的)。
Linux下QT平台Mysql数据库开发环境配置相关推荐
- linux mysql 开发环境_RedHat Linux下QT平台MySQL数据库开发环境配置
This doucment is about how to add MySQL driver into QT and about database connections 由于之前安装RedHat的时 ...
- linux 安装qt mysql库_Linux下QT平台Mysql数据库开发环境配置
This doucment is about how to add mysql driver into QT and about database connections 由于之前安装RedH ...
- linux备份mysql怎样操作,Linux下自动备份MySQL数据库详细操作步骤(转载)
环境说明 操作系统:CentOS IP:192.168.150.214 Oracle数据库版本:Oracle11gR2 用户:root 密码:123456 端口:3306 数据库:ts_0.ts_1. ...
- 详解Ubuntu10.10下Qt连接Mysql数据库
转载自:http://mobile.51cto.com/symbian-273262.htm 详解Ubuntu10.10下Qt连接Mysql数据库是本文要介绍的内容,很详细的步骤,我们先来看内容. 第 ...
- linux首次登陆mysql设置密码,Linux下第一次使用MySQL数据库,设置密码
在终端下输入:/etc/rc.d/init.d/mysqld status 查看MySQL状态,看看是否运行. 没有运行的话就输入:/etc/rc.d/init.d/mysqld start 这时,就 ...
- windows下搭建Apache+Mysql+PHP开发环境
原文:windows下搭建Apache+Mysql+PHP开发环境 要求 必备知识 熟悉基本编程环境搭建. 运行环境 windows 7(64位); Apache2.2; MySQL Server 5 ...
- mysql5.6.24安装perl,linux下perl操作MySQL数据库(需要安装DBI)
这篇文章主要为大家详细介绍了linux下perl操作MySQL数据库(需要安装DBI),具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小编小韵来看看吧!DBI安装:D ...
- ubuntu qt平台搭建openssl开发环境
ubuntu qt平台搭建openssl开发环境 1.下载解压 (这里以当前官网下载的最新版本为例,官网地址:http://www.openssl.org/source) tar -zxvf open ...
- linux mysql如何远程连接mysql数据库,Linux下远程连接MySQL数据库的方法
Linux下远程连接MySQL数据库的方法 踩坑笔记 估计搞了一个多小时才把这个远程连接搞好.一台本地电脑,一台云服务器,都是linux系统. 步骤 1.在服务器端开启远程访问 首先进入mysql数据 ...
最新文章
- web服务器tornada,flask问题
- Ubuntu 划词翻译
- ios android安全性分析,Android与iOS的对比分析及Android安全技术的设计与实现
- msvc/gcc:中用#pragma指令关闭特定警告(warning)
- 二叉树的先序/中序/后序/层次遍历
- PROCESSES, SESSIONS和CONNECTIONS的区别
- 如何在Linux下创建与解压zip, tar, tar.gz和tar.bz2文件 .
- 蓝牙4.0大数据分包处理
- 轻松生成小程序分享海报
- java mysql 主键生成策略_主键生成策略
- 注册事件的两种方式(传统注册事件、方法监听注册事件)
- 『解疑』vue修改html图标,tilte左边的图标(以图片格式作为图标)
- ios13 微信提示音插件_iOS 13 替换微信提示音(教程),简单操作
- zkSnarks:证明问题到QAP的转换
- Pytorch基础教程(1):人工智能与Pytorch简介
- 【数据结构与算法】普里姆算法的介绍和修路问题程序实现
- Flood fill algorithm
- Android实现自定义曲线截屏,Android实现截屏和截长图功能的各种方法
- 三层交换的定义和实现过程
- 学计算机独显重要吗,花这钱真没必要!入门级独显的笔记本就别考虑了
热门文章
- 撼龙图怎么开鸿蒙炁灵,【一人之下】新手入门必看攻略,萌新技巧超详细攻略...
- 研究生规划及论文写作
- 从首个「数实融合」公益球场,看元宇宙奏响创新「三重奏」
- 接口全周期的生产力利器Apifox
- 用mysql编资产负债表_资产负债表如何编制!
- 解决SQL Server报错:229、262、5123
- ubuntu空间扩容--grub修复之boot-repair修复
- 突破硬件瓶颈(二):存储架构和协议瓶颈
- MySQL--count函数如果得到null的处理方法
- java图片加气泡文字,动态图片加气泡文字 微信动态图片加文字教程