【银河麒麟下】 安装达梦数据库 + 使用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,可执行程序(如 isql、odbcinst)则在 /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

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

这个方案也可以

相关推荐
努力实干9 小时前
Qt/C++ 模块化设计与工程组织
开发语言·c++·qt
Lhan.zzZ10 小时前
Qt:动态库模块框架设计
开发语言·c++·qt
qq_401700411 天前
TCP 长连接、心跳包与断线自动重连设计:工业级通信的“不死鸟”架构
网络·qt·tcp/ip
dyxal2 天前
A2A 协议 v1.0 完全指南:方法名、Agent Card、三种绑定与 FastAPI 实战
开发语言·qt·fastapi
金色熊族2 天前
在Qt中使用asan检测内存泄漏(一)
linux·qt·asan
前行中的小猪2 天前
Qt 5 踩坑实录:多显示器跨屏拖拽导致窗口异常放大与 setGeometry 报错的深度解析与根治
qt·多显示器·高分辨率·多屏幕
想做小南娘,发现自己是女生喵2 天前
QT项目实战第一周(嵌入式)
开发语言·qt
誰能久伴不乏2 天前
【无标题】
c++·qt·机器人
金色熊族2 天前
在Qt中使用asan检测内存泄漏(二)--检查依赖库的内存使用
linux·qt·asan
qq_401700412 天前
Qt 组播(Multicast)实战详解
开发语言·qt