Qt是一个基于C++的跨平台软件开发框架。它为应用程序开发者提供建立艺术级图形用户界面所需的功能。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。
Qt具有优良的跨平台特性,支持下列操作系统: Microsoft Windows 95/98, Microsoft Windows NT, Linux, Solaris, SunOS, HP-UX, Digital UNIX (OSF/1, Tru64), Irix, FreeBSD, BSD/OS, SCO, AIX, OS390,QNX 等等。
QDM是达梦数据库提供的对 QT SQL 模块进行支持。 QT 通过 QT SQL 模块提供了对 SQL 数据库的支持,QT SQL 模块接口是独立于数据库的,它可以通过数据库驱动插件和不同的数据库接口进行通信。
安装。
一、下载安装包
操做系统:Centos7.6
所需软件包:
1、unixODBC-2.3.0.tar.gz
下载odbc网址:http://www.unixodbc.org/
2、qt-opensource-linux-x64-5.9.9.run
下载qt网址:https://download.qt.io/archive/qt/
二、配置环境
1、安装DM8,新建实例并启动数据库服务(略)
数据库信息:
端口号:5236
用户名:SYSDBA
密码:SYSDBA
安装路径:/opt/dmdbms
2、安装QT
在root用户下执行
./qt-opensource-linux-x64-5.9.9.run
编译 QDM 需要引用 QT src 中的相关文件,所以编译前我们需要先安装 QT,并在安装时选择 Source 组件。
3、gcc和g++环境确认
[root@localhost QtSql]# gcc –v
……
gcc version 7.3.1 20180303 (Red Hat 7.3.1-5) (GCC)
[root@localhost QtSql]# g++ -v
……
gcc version 7.3.1 20180303 (Red Hat 7.3.1-5) (GCC)
需确保GCC和G++的版本在5.4及以上,否则编译过程会报错,出现如下错误:
[root@localhost dm]# make debug
make -f Makefile.Debug
make[1]: Entering directory `/opt/Qt5.9.9/5.9.9/Src/qtbase/src/plugins/sqldrivers/dm'
g++ -pipe -g -std=c++1z -fvisibility=hidden -fvisibility-inlines-hidden -fno-exceptions -Wall -W -Wvla -Wdate-time -dM -E -o .moc/debug/moc_predefs.h /opt/Qt5.9.9/5.9.9/gcc_64/mkspecs/features/data/dummy.cpp
g++: error: unrecognized command line option ‘-std=c++1z’
g++: error: unrecognized command line option ‘-Wdate-time’
make[1]: *** [.moc/debug/moc_predefs.h] Error 1
make[1]: Leaving directory `/opt/Qt5.9.9/5.9.9/Src/qtbase/src/plugins/sqldrivers/dm'
make: *** [debug] Error 2
可以采取安装scl源的方法安装高版本gcc和g++,如下:
[root@localhost ~]# yum install centos-release-scl-rh
[root@localhost ~]# yum install centos-release-scl
[root@localhost ~]# yum search gcc
安装gcc和g源
[root@localhost ~]# yum install devtoolset-7-gcc.x86_64
[root@localhost ~]# yum install devtoolset-7-gcc-c.x86_64
执行scl命令使高版本gcc和g++生效
[root@localhost ~]# scl enable devtoolset-7 bash
再次检查版本,发现使用了高版本的gcc和g++,确认无误后进行后面的步骤
[root@localhost ~]# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
……
gcc version 7.3.1 20180303 (Red Hat 7.3.1-5) (GCC)
[root@localhost ~]# g++ -v
Using built-in specs.
COLLECT_GCC=g++
……
gcc version 7.3.1 20180303 (Red Hat 7.3.1-5) (GCC)
4、将qmake写入/etc/profile中
export PATH="$PATH:/opt/Qt5.9.9/5.9.9/gcc_64/bin"
二、部署QDM
1、下载QDM源码
QDM下载连接见:https://eco.dameng.com/download/?_blank
QDM源码下载好后,将QDM源码的目录拷贝到QDM目录下:
cp qt_src/plugins_sqldrivers/dm_56
/opt/Qt5.9.9/5.9.9/Src/qtbase/src/plugins/sqldrivers/
cp qt_src/sql_drivers/dm
/opt/Qt5.9.9/5.9.9/Src/qtbase/src/sql/drivers/
没有的目录自行创建,拷贝完成如下图所示:
2、编译QDM动态库
cd /opt/Qt5.9.9/5.9.9/Src/qtbase/src/plugins/sqldrivers/dm
qmake "INCLUDEPATH+=/opt/dmdbms/include" "LIBS+=/opt/dmdbms/include/libdmdpi.a -ldl" "DEFINES+=DM64" "CONFIG+=debug_and_release" dm.pro
注意INCLUDEPATH和LIBS需要根据实际情况修改,指定达梦安装目录下的include目录,编译完成后会生成三个Makefile新文件
3、执行make debug编译
[root@localhost dm]# make debug
/opt/dmdbms/include/libdmdpi.a(ossema.o): In function `os_sema2_free_ex':
/home/dmops/build/svns/1646367691262/os/ossema.c:1023: undefined reference to `shm_unlink'
/opt/dmdbms/include/libdmdpi.a(ossema.o): In function `os_sema2_id_get_ex':
/home/dmops/build/svns/1646367691262/os/ossema.c:993: undefined reference to `shm_open'
/opt/dmdbms/include/libdmdpi.a(ossema.o): In function `os_sema2_create_low_ex':
/home/dmops/build/svns/1646367691262/os/ossema.c:904: undefined reference to `shm_open'
collect2: error: ld returned 1 exit status
make[1]: *** [../plugins/sqldrivers/libqsqldm.so] Error 1
make[1]: Leaving directory `/opt/Qt5.9.9/5.9.9/Src/qtbase/src/plugins/sqldrivers/dm'
make: *** [debug] Error 2
可能会出现上述错误,这是由于部分库未导入导致的,进行如下修改:
vim /opt/Qt5.9.9/5.9.9/Src/qtbase/src/plugins/sqldrivers/dm/Makefile.debug
在Makefile.debug文件中找到这样一行
LIBS = $(SUBLIBS) /opt/dmdbms/include/libdmdpi.a -ldl -L/opt/Qt5.9.9/5.9.9/gcc_64/lib -lQt5Sql -lQt5Core -lpthread
并在最后加上-lrt,如下:
LIBS = $(SUBLIBS) /opt/dmdbms/include/libdmdpi.a -ldl -L/opt/Qt5.9.9/5.9.9/gcc_64/lib -lQt5Sql -lQt5Core -lpthread -lrt
4、将生成的libqsqldm.so文件拷贝到/opt/Qt5.9.9/5.9.9/gcc_64/plugins/sqldrivers/ 下
cp ../plugins/sqldrivers/libqsqldm.so /opt/Qt5.9.9/5.9.9/gcc_64/plugins/sqldrivers/
5、查看依赖库是否完整
[root@localhost sqldrivers]# ldd libqsqldm.so
linux-vdso.so.1 => (0x00007ffea2d9a000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f47e5993000)
libQt5Sql.so.5 => /opt/Qt5.9.9/5.9.9/gcc_64/plugins/sqldrivers/./../../lib/libQt5Sql.so.5 (0x00007f47e574c000)
libQt5Core.so.5 => /opt/Qt5.9.9/5.9.9/gcc_64/plugins/sqldrivers/./../../lib/libQt5Core.so.5 (0x00007f47e5005000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f47e4de9000)
librt.so.1 => /lib64/librt.so.1 (0x00007f47e4be1000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f47e48d9000)
libm.so.6 => /lib64/libm.so.6 (0x00007f47e45d7000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f47e43c1000)
libc.so.6 => /lib64/libc.so.6 (0x00007f47e3ff3000)
/lib64/ld-linux-x86-64.so.2 (0x00007f47e6800000)
libz.so.1 => /lib64/libz.so.1 (0x00007f47e3ddd000)
libicui18n.so.56 => /opt/Qt5.9.9/5.9.9/gcc_64/plugins/sqldrivers/./../../lib/libicui18n.so.56 (0x00007f47e3944000)
libicuuc.so.56 => /opt/Qt5.9.9/5.9.9/gcc_64/plugins/sqldrivers/./../../lib/libicuuc.so.56 (0x00007f47e358c000)
libicudata.so.56 => /opt/Qt5.9.9/5.9.9/gcc_64/plugins/sqldrivers/./../../lib/libicudata.so.56 (0x00007f47e1ba9000)
libgthread-2.0.so.0 => /lib64/libgthread-2.0.so.0 (0x00007f47e19a7000)
libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x00007f47e1691000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f47e142f000)
如果存在某些库缺失,执行find / -name “so文件名”找到该文件,放到/lib64下即可
三、QT连接达梦数据库测试
1、新建工程
2、选择工程类型
3、工程目录如下:
4、在test1.pro文件里添加这两行
QT += sql
INCLUDEPATH += /opt/Qt5.9.9/5.9.9/gcc_64/include/QtSql
5、测试代码如下:
#include
#include
#include
#include
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase("QDM");
db.setHostName("localhost");
db.setPort(5236);
db.setDatabaseName("dm8");
db.setUserName("SYSDBA");
db.setPassword("SYSDBA");
if (db.open())
qDebug() << "connect ok!";
else
{
qDebug() << "connect fail! " << db.lastError().text().toLatin1();
}
return a.exec();
}
6、连接达梦数据库成功
文章
阅读量
获赞