【银河麒麟下】 安装达梦数据库 + 使用Qt访问达梦数据库

首先,要有达梦数据库的安装包:

之后按照流程逐步安装即可

中间还需要我们复制一些提示框中的命令,然后自己执行。

安装好后,为了使用Qt访问,需要我们自己编译unixodbc

unixODBC

从官网下载下来,然后开始编译操作。


我中间踩了一个坑,因为我之前编译过unixodbc,然后直接把原有的程序拷贝了过来,然后在执行make -j4的时候,出现了错误。

make2: 进入目录"/data/unixODBC-2.3.14/libltdl" CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/bash /data/unixODBC-2.3.14/missing aclocal-1.15 -I ../m4 /data/unixODBC-2.3.14/missing:行81: aclocal-1.15:未找到命令 WARNING: 'aclocal-1.15' is missing on your system. You should only need it if you modified 'acinclude.m4' or 'configure.ac' or m4 files included by 'configure.ac'. The 'aclocal' program is part of the GNU Automake package:
这个 aclocal-1.15: 未找到命令 的错误,根本原因是编译系统所需的 automake 版本与系统当前安装的版本不匹配

unixODBC 源码包中的 configure 脚本是在 automake 1.15 环境下生成的,因此 Makefile 中硬编码了对 aclocal-1.15 的调用。

后来我重新下载了一份源码,重新编译,就可以了。所以还是使用干净的源码编译比较好。


进入源码目录,运行 configure 脚本。常用的配置选项如下:

cpp 复制代码
./configure --prefix=/usr/local/unixODBC
            --sysconfdir=/etc \
            --enable-gui=no \
            --enable-drivers=no

常用选项说明:

选项 作用
--prefix=/usr/local/unixODBC 指定安装路径,默认为 /usr/local
--sysconfdir=/etc 指定配置文件目录(odbc.ini、odbcinst.ini 等)
--enable-gui=no 禁用 GUI 工具,减少依赖
--enable-drivers=no 不编译自带驱动,仅编译驱动管理器
--enable-fastvalidate=yes 启用快速验证以获得更高性能(可能影响无效句柄的错误处理)
--build=aarch64-unknown-linux-gnu ARM 架构编译时追加

各配置选项详解

--prefix=/usr/local/unixODBC

这个选项决定了 unixODBC 主体程序的安装根目录 。执行**make install后,核心库文件(如 libodbc.so)会安装到 /usr/local/unixODBC/lib,可执行程序(如 isqlodbcinst)则在 /usr/local/unixODBC/bin 下。不指定时,默认前缀是/usr/local**。

--sysconfdir=/etc

此选项指定了 ODBC 配置文件的存放位置 。unixODBC 的核心配置文件**odbcinst.ini**(用于定义驱动)和 odbc.ini(用于定义数据源)将会被安装到 /etc 目录下,而非默认的 <prefix>/etc(即 /usr/local/unixODBC/etc)。将配置文件放在 /etc 是许多系统管理员的习惯,便于集中管理。

注意 :如果你希望配置文件也独立于系统,可以考虑像 LFS 文档那样,设置 --sysconfdir=/etc/unixODBC,将所有 ODBC 相关文件收纳在一个独立的子目录里。

--enable-gui=no

这个选项禁止编译基于 Qt 的图形化管理工具 (如 ODBCConfig)。在服务器环境或无需图形界面的场景下,禁用 GUI 可以避免引入庞大的 Qt 依赖,从而简化编译过程并减少安装体积。从 unixODBC 2.3.0 版本开始,GUI 组件已被移出主项目,因此显式禁用它通常是个好习惯。

--enable-drivers=no

此选项禁止编译 unixODBC 自带的示例或测试驱动 (如 MySQL、Postgres 等)。在实际生产环境中,你通常只会使用特定数据库厂商提供的官方 ODBC 驱动。禁用内置驱动可以避免编译无用组件,并防止这些驱动与系统上已安装的真实驱动产生冲突。同样,从 unixODBC 2.3.0 版本起,该选项的默认值已变为 no


注意:

上面是deepseek给出的。

我实际上使用的是:

cpp 复制代码
./configure --prefix=/usr/local/unixodbc
            --sysconfdir=/etc \
            --enable-gui=no \
            --enable-drivers=no

这里又有一个坑,我之前编译的电脑上使用的是/usr/local/unixodbc

但这次deepseek给出的路径是/usr/local/unixODBC

然后我使用isql访问达梦,就不可以了。

说明unixODBC和unixodbc是不一样的。这个系统是区分大小写的。
银河麒麟系统是区分大小写的吗?

银河麒麟(Kylin OS)本质上是 Linux 发行版 ,因此它的默认行为与主流 Linux 一致:区分大小写
为了修改目录unixODBC为unixodbc

需要首先修改目录权限

chmod 777 目录

只可以修改该目录的权限

chmod -R 777 目录名

这样可以递归修改该目录

编译与安装

cpp 复制代码
# 编译(使用多核加速)
make -j$(nproc)

# 安装(可能需要 root 权限)
sudo make install

安装完成后

库文件会复制到 [prefix]/lib

可执行文件在 [prefix]/bin

配置环境变量

为了让系统能够找到 unixODBC 的命令和库,需要配置环境变量。

cpp 复制代码
sudo vim /etc/profile

export DM_HOME=/home/admin123/dmdbms
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin
export PATH=$PATH:$DM_HOME/bin



sudo vim ~/.bashrc 

# 达梦数据库核心环境变量
export DM_HOME=/home/admin123/dmdbms
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/unixodbc/lib
export PATH=$PATH:$HOME/bin:$DM_HOME/bin:/usr/local/unixodbc/bin

# ODBC 配置
export ODBCINI=/usr/local/unixodbc/etc/odbc.ini
export ODBCSYSINI=/usr/local/unixodbc/etc

然后使配置生效:

cpp 复制代码
source ~/.bash_profile

使用unixobdc访问达梦数据库

配置驱动和数据源

配置主要涉及两个文件:odbcinst.ini(驱动注册)和 odbc.ini(数据源定义)。具体路径可以通过命令 odbcinst -j 查看。

odbc.ini

cpp 复制代码
[DM8]
Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER
SERVER = 127.0.0.1
UID = SYSDBA
PWD = SYSDBA
TCP_PORT = 5236

odbcinst.ini

cpp 复制代码
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
Driver = /home/admin123/dmdbms/bin/libdodbc.so

使用isql访问达梦数据库

使用达梦数据库的工具来访问达梦数据库

disql 是达梦数据库自带的命令行交互式客户端工具,类似于 Oracle 的 SQL*Plus,适合在无图形界面的服务器上使用。

cpp 复制代码
# 基本连接语法:./disql 用户名/密码@主机:端口
./disql SYSDBA/SYSDBA@127.0.0.1:5236

如果数据库使用的是默认端口 5236,可以省略端口号

还有个问题,我这些都配置好了,可以使用isql和disql访问达梦数据库

但是我使用QtCreator访问:

数据库打开失败: "unixODBCDriver ManagerCan't open lib 'DM8 ODBC DRIVER' : file not found QODBC3: 不能连接"

但是我的Qt程序如果是通过命令行运行,就可以访问达梦数据库,如果是通过QtCreator启用,就无法访问达梦数据库。

方案一:在Qt Creator项目设置中直接添加环境变量(最推荐)

我就是用的这种方案,在我原来的电脑上可以,现在新电脑不行了。

方案二:从终端启动Qt Creator(最简单的临时方案)

这个可以

方案三:修改Qt Creator的启动方式(一劳永逸的系统级方案)

找到Qt Creator的 .desktop 文件

通常位于 ~/.local/share/applications/org.qt-project.qtcreator.desktop

/usr/share/applications/qtcreator.desktop

使用文本编辑器打开它(可能需要 sudo 权限)。

找到 Exec= 开头的那一行,将其修改为通过 bash -ic 来启动,从而加载你的shell配置

cpp 复制代码
# 修改前
Exec="/opt/Qt5.14.2/Tools/QtCreator/bin/qtcreator" %F

# 修改后
Exec=bash -ic "/opt/Qt5.14.2/Tools/QtCreator/bin/qtcreator" %F

保存文件后,注销并重新登录(或重启电脑),使修改生效

这个方案也可以

相关推荐
kaixin_learn_qt_ing8 小时前
model/view 筛选功能
qt
佳児素花痴╮12 小时前
Qt速通2
开发语言·qt
心态还需努力呀13 小时前
把 Flameshot 编译进鸿蒙 PC:一次 Qt C++ 截图工具的源码级移植实战
c++·qt·harmonyos
CodeMaker80814 小时前
规则更规范,应用却起不来:我重新理解了 Qt Agent Skills
qt
楚莫识15 小时前
Qt show()、raise()、activateWindow() 调用顺序区别
qt·pyqt
励志不掉头发的内向程序员15 小时前
【LibreCAD 2D架构】从 addHistory 到 RS_UndoCycle:LibreCAD 里的两套 History 与撤销机制
开发语言·c++·qt·学习·系统架构
mengzhi啊1 天前
缓存类CacheDataManager把临时数据存入json。做成插件·
qt·缓存·json
尘客-追梦1 天前
Day 01:插件化之前,先看清 ABI 这堵墙
开发语言·c++·qt
Quz1 天前
QML SwipeView:实现一个简单的图片浏览器
qt