RedHat Linux下QT平台MySQL数据库开发环境配置(2)

把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的数据库部分已经基本搞好了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/25952.html