QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库

这篇具有很好参考价值的文章主要介绍了QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0、背景

在嵌入式系统中使用QT开发上位机应用时不可避免的会涉及访问各种数据库的场景,而服务端数据库的种类则有多种可能(Oracle、Postgresql、MySql、SQLServer),本文就介绍一下如何实现在Linux Arm环境下实现QT程序通过ODBC驱动访问SQLServer数据库的。

1、基本环境

开发环境操作系统:windows10专业版
QT版本:5.15.2
QT安装目录:D:\Qt
交叉编译环境操作系统:Ubuntu18.4
QT版本:5.15.2
QT安装目录:/opt/Qt
目标环境操作系统:Linux4.19 Arm 64
QT版本:5.15.2

2、搭建交叉编译环境

由于ARM开发板的内存资源和存储资源以及嵌入式操作系统的限制,我们不大可能在ARM开发板的系统上安装QT开发环境以及源码,ARM开发板通常作为最终的运行环境。我们用的笔记本或个人PC往往是X86处理器,因此在笔记本系统或个人PC中编译的QT程序是无法直接运行在ARM开发板上的。从开发电脑到ARM开发板是有2个关键的变化,1是操作系统从Windows变为了Linux,2是从X86处理器变为了ARM处理器。这就需要搭建一台交叉编译服务器(可以是一台独立的PC或者是虚拟机),交叉编译服务器的操作系统要为Linux,示意如下:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习

交叉编译环境的搭建主要是获得对应的交叉编译工具链,就是在X86处理器上运行的Linux系统中使用交叉编译工具链对X86的Windows下开发的源码进行交叉编译生成基于Arm处理器的Linux系统能够运行的目标程序。

通常我们管X86的Windows开发环境叫开发环境,X86的Linux环境叫交叉编译环境,Arm的Linux环境叫目标环境或运行环境。最简单搭建交叉编译环境的方式就是直接使用目标开发版操作系统的编译服务器作为交叉编译服务器。不过这个环境一般比较大,因为操作系统的源码非常大。要想用一个轻量级的交叉编译环境,还是建议自己搭建。

本文后面介绍的是直接采用的操作系统编译服务器作为交叉编译环境的。

3、在交叉编译服务器上交叉编译安装unixODBC

3.1 下载unixODBC

1、unixODBC的官网地址为:https://www.unixodbc.org/
如下图:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习
2、如要下载最新版本,则点击左侧菜单中的Download,如下图:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习
3、如果要下载历史版本,可以通过ftp://ftp.unixodbc.org/pub/unixODBC网址下载需要的版本,如下图:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习
4、因为Linux Arm目标环境中安装的版本是2.3.4,为了一致,所以在交叉编译服务器上我也下载这个版本,如下:

cd /usr/local/src
wget ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.4.tar.gz

如下图:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习
5、然后就可以对其进行解压了,如下:

tar -xzvf unixODBC-2.3.4.tar.gz
ls

如下图:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习

3.2 交叉编译unixODBC

3.2.1 基本编译说明

1、在官网的下载页面已经介绍了基本的安装步骤,如下:
1.1 默认安装如下:

./configure
make
make install

1.2 指定目录安装如下:

./configure --prefix=/usr/local/unixODBC
make
make install

1.3 指定配置路径安装如下:

./configure --sysconfdir=/etc
make
make install

当然,1.2 1.3可以结合在一起。
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习

3.2.2 交叉编译说明

1、要想对c/c++源码进行交叉编译,首先要在交叉编译服务器上安装配置交叉编译工具链。这里就不介绍安装过程了,为了能够保证与目标系统一致,我使用的就是构建目标操作系统时生成的交叉编译环境,目录为:LinuxSDK/buildroot/output/rockchip_rk3568/host/bin/。如下图:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习
上图中可以看出:

交叉编译工具链所在目录为:/home/zhenglb/Linux/wg_rk356x_linux_sdk/buildroot/output/rockchip_rk3568/host/bin
交叉编译工具链名称为:aarch64-buildroot-linux-gnu

2、需要把交叉编译器所在的路径添加到PATH环境变量中,方便系统能找到交叉编译器,如下:

echo $PATH
export PATH=$PATH:/home/zhenglb/Linux/wg_rk356x_linux_sdk/buildroot/output/rockchip_rk3568/host/bin
echo $PATH

如下图:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习

3.2.3 ./configure -build,-host,-target参数说明

在对c/c++源码进行交叉编译的时候,关键的一步是设置configure的参数,其中有三个参数-build、-host、-target的区别如下:

  • build:执行代码编译的主机,正常的话就是你的主机系统。这个参数一般由config.guess来猜就可以。当然自己指定也可以。
  • host:编译出来的二进制程序所执行的主机,因为绝大多数是本机编译,本机执行,所以这个值就等于build。只有交叉编译的时候(也就是本机编译,其他系统机器执行)才会build和host不同。用host指定运行主机。
  • target:这个选项只有在建立交叉编译环境的时候用到,正常编译和交叉编译都不会用到。他用build主机上的编译器,编译一个新的编译器(binutils, gcc,gdb等),这个新的编译器将来编译出来的其他程序将运行在target指定的系统上。

3.2.4 交叉编译unixODBC的具体过程

1、下面就看一下在交叉编译服务器上的交叉编译安装步骤,如下:

cd unixODBC-2.3.4
./configure --prefix=/usr/local/arm/unixODBC --host=aarch64-buildroot-linux-gnu
make
make install

日志太长,就不截图了。–prefix指定了安装位置,–host指定了交叉编译工具链

3、安装完毕后,就会在/usr/local/arm目录下看到unixODBC目录了,如下图:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习

  • 在/usr/local/arm/unixODBC/include目录下是我们交叉编译odbc.pro所依赖的unixODBC的头文件
  • 在/usr/local/arm/unixODBC/lib目录下是我们交叉编译odbc.pro所依赖的库

如下图:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习

4、交叉编译QT源码中的odbc.pro

1、首先在交叉编译服务器上进入odbc.pro源码目录,如下:

cd /opt/Qt/5.15.2/Src/qtbase/src/plugins/sqldrivers/odbc
ls

如下图:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习
2、修改odbc.pro文件添加指定unixODBC头文件及库文件的位置的相关代码,如下:

vim odbc.pro

odbc.pro修改的内容

#注释下行
#QMAKE_USE += odbc
#增加以下2行
INCLUDEPATH += /usr/local/arm/unixODBC/include
LIBS += -L/usr/local/arm/unixODBC/lib -lodbc

如下图:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习
3、按:wq,保存退出odbc.pro文件的编辑
4、使用交叉编译工具链下的qmake生成Makefile,如下:
这里我使用的是目标Linux操作系统构建时生成的交叉编译工具链,位置为:
LinuxSDK/buildroot/output/rockchip_rk3568/host/bin/qmake,如下图:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习
(如果在此终端下已配置了交叉编译工具链的PATH环境变量,可以直接qmake)具体使用如下:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习
5、然后输入make命令进行交叉编译,交叉编译完毕后会在原木odbc目录同级目录生成plugins/sqldrivers目录,交叉编译生成的库文件就这这个目录中,如下图:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习

5、在交叉编译服务器上交叉编译安装freeTDS

5.1 下载freeTDS

1、freeTDS的官网地址为:https://www.freetds.org/
如下图:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习
2、通过ftp://ftp.freetds.org/pub/freetds/可以查看历史版本,如下图:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习
3、在开发环境下可以直接点击右侧菜单中的Stable Release进行下载。或者通过右键查看属性获取到下载地址,如下图:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习
4、在交叉编译服务器上通过wget直接下载freetds到交叉编译服务器中,如下:

cd /usr/local/src
wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-1.3.19.tar.gz

如下图:

QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习
5、然后就可以解压了,如下:

tar -xzvf freetds-1.3.19.tar.gz
ls

QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习

5.2 交叉编译freeTDS

1、首先,如果PATH环境变量中没有指定交叉编译器的路径,则需要把交叉编译器所在的路径添加到PATH环境变量中,方便系统能找到交叉编译器,如下:

echo $PATH
export PATH=$PATH:/home/zhenglb/Linux/wg_rk356x_linux_sdk/buildroot/output/rockchip_rk3568/host/bin
echo $PATH

1、下面就看一下在交叉编译服务器上的交叉编译安装步骤,如下:

cd freetds-1.3.19
./configure --prefix=/usr/local/arm/freetds --host=aarch64-buildroot-linux-gnu --with-tdsver=7.1 --disable-libiconv
make
make install

日志太长,就不截图了。–prefix指定了安装位置,–host指定了交叉编译工具链

3、安装完毕后,就会在/usr/local/arm目录下看到freetds目录了,如下图:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习

6、把交叉编译生成的库部署到Linux Arm目标系统

6.1 部署unixODBC

如果目标系统中没有unixODBC,则部署方式与6.2 部署freeTDS类似。因为我的目标系统已经有unixODBC了,并且安装时没有指定安装目录,是属于默认安装的。
因此配置文件路径为/etc/odbc.ini、/etc/odbcinst.ini。so库在/usr/lib目录下

6.2 部署freeTDS

1、首先把第5步在交叉编译服务器上交叉编译freeTDS后的安装目录/usr/local/arm/freetds压缩一下,如下:

cd /usr/local/aram
tar -cvf freetds.tar freetds

2、把压缩包freetds.tar从交叉编译服务器下载后,传到目标系统(Linux Arm)中。

注意:一定要相同目录

如下图:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习
3、然后在目标系统中对其进行解压。

6.3 部署QT ODBC驱动

把第4步在交叉编译服务器上交叉编译QT源码中的odbc.pro生成的libqsqlodbc.so复制到目标系统(Linux Arm)的qt的插件目录下,如下图:
复制前:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习
复制后:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习

7、编写ODBC配置

7.1 配置freetds

修改/usr/local/aram/freetds/etc/freetds.conf,添加如下内容:

[SQLSERVER]
       host = xxx.xxx.xxx.xxx
       port = 1433
       tds version = 7.0
       client charset = UTF-8

freetds.conf是用于管理SQL Server服务信息的
[SQLSERVER] #定义服务名称
host = xxx.xxx.xxx.xxx #指定SQL Server服务器的IP地址或者主机名称/域名
port = 1433 #指定SQL Server服务器对外服务的端口号
tds version = 7.0 #指定tds的版本
client charset = UTF-8 #指定客户端字符集

7.2 配置unixODBC

修改/etc/odbcinst.ini,添加如下内容:

[FreeTDS]
Description = FreeTDS unixODBC Driver
Driver = /usr/local/arm/freetds/lib/libtdsodbc.so
UsageCount = 1

odbcinst.ini是unixODBC管理数据访问驱动的配置文件,通过ODBC访问不同种类的数据库会用到不同的驱动库
[FreeTDS] #定义驱动名称
Description = FreeTDS unixODBC Driver #对驱动的描述,可以是任意值
Driver = /usr/local/arm/freetds/lib/libtdsodbc.so #指定驱动库文件的完整路径
UsageCount = 1

修改/etc/odbc.ini,添加如下内容:

[testdsn]
Driver = FreeTDS
Description = MS SQL Server
Servername = SQLSERVER
Database = test

odbc.ini是unixODBC管理数据源名称的配置文件,在程序中指定的数据源名称就是在这个文件中定义的
[testdsn] #是指数据源名称
Driver = FreeTDS #指定访问数据库所使用的驱动,驱动的值(FreeTDS)必须为odbcinst.ini中的配置的中括号中的值[FreeTDS]一致
Description = MS SQL Server #对当前数据源的描述,可以是任意值
Servername = SQLSERVER #指定服务名称,服务名称(SQLSERVER)必须跟freetds.conf中配置的中括号中的值[SQLSERVER]一致
Database = test #指定默认数据库,数据库的名称必须是服务器上有的数据库

8、基本工具测试

8.1 使用freeTDS的tsql测试SQL Server的连通性

1、在freetds的部署目录(/usr/local/arm/freetds)的bin目录下有一个工具tsql,如下:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习
2、查看FreeTDS状态
命令如下:

cd /usr/local/arm/freetds/bin
./tsql -C

执行结果如下:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习
3、传入IP地址,端口号、用户名、密码测试SQL Server的连通性

命令格式:tsql -Hip地址 -p端口号 -U 用户名 -P 密码

测试如下:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习
4、对freetds.conf中配置的服务名进行连通性测试。

命令格式:tsql -S 服务名 -U 用户名 -P 密码

QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习
通过服务名能连通,说明我们的freetds.conf配置是正确的。

8.2 使用unixODBC的isql测试数据源配置的正确性

1、我的目标系统是按默认配置安装的unixODBC,因此他的工具默认都是安装到了/usr/bin目录下。
2、可以通过odbcinst查看unixODBC的基本信息,如下:

cd /usr/bin
odbcinst -j

执行如下图:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习
3、通过isql工具对odbc.ini中配置的数据源是否正确进行验证,如下:

命令格式:isql 数据源名称 数据库登录名 数据库登录密码

测试如下图:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习
如果提示Connected!,并且能够正确执行SQL语句,说明odbc.ini中的数据源配置是正确的。

9、程序测试

1、QT关键的代码如下:

void Widget::on_btnDbTest_clicked()
{
    QStringList driverList = QSqlDatabase::drivers();
    qDebug() << driverList;

    //以下代码是测试通过ODBC访问MSSQLServer数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    db.setDatabaseName("testdsn");			//这里指定的是配置好的数据源名称
    db.setUserName("sa");
    db.setPassword("xxxxxx");				//密码根据实际进行修改

    if (!db.open())
    {
        qDebug() << "数据库连接失败!";
        QSqlError lastError = db.lastError();
        qCritical() << lastError.nativeErrorCode() << ", " << lastError.text();
    }
    else
    {
        qDebug() << "数据库连接成功!";
        QSqlQuery query(db);
        if (query.exec("select * from UserInfo"))
        {
            qDebug() << "查询表格UserInfo成功!";
            while(query.next())
            {
                qDebug() << query.value(0).toInt() << ", " << query.value(1).toString() << ", " << query.value(2).toString() << "," << query.value(3).toString();
            }
        }
    }
}

2、对QT程序进行交叉编译后,部署到目标系统进行执行测试,运行效果如下:
QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库,qt,数据库,qt,学习文章来源地址https://www.toymoban.com/news/detail-661839.html

到了这里,关于QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT5.12.12通过ODBC连接到GBase 8s数据库(CentOS)

    本示例使用的环境如下: 硬件平台:x86_64(amd64) 操作系统:CentOS 7.8 2003 数据库版本(含CSDK):GBase 8s V8.8 3.0.0_1 为什么使用QT 5.12.10? 该版本包含QODBC。 1.1,确认操作系统已经安装unixODBC及unixODBC-devel 通过apt查找确认unixODBC及unixODBC-devel已经安装 如果未安装使用apt源进行安装

    2024年02月11日
    浏览(33)
  • 3:Ubuntu上配置QT交叉编译环境并编译QT程序到Jetson Orin Nano(ARM)

       GCC配置同上   最后配置Kits 上面设置完成之后 ,设置Kits 中的Device(这是为了能够直接把项目部署到arm设备上)      点击NEXT之后会出现连接被拒绝,不用担心 ,下面会对其设置密码。 验证arm设置的密码。                 代码: 此代码是抄的别人的,具体是哪位博主的

    2024年02月11日
    浏览(33)
  • ARM学习笔记_1 介绍,Keil环境搭建

    学习自b站一口linux老师的课程。 学习ARM需要学计算机原理,汇编,C语言,基本电路,硬件控制器原理,以及编写相应驱动程序。 了解系统启动、上电、函数调用等底层实现。 真正地提高函数运行效率。 一些软件的破解…… 设计微处理器架构的公司,包含三类:cortex-A, -R

    2024年02月05日
    浏览(30)
  • QT学习笔记-oracle oci数据库驱动交叉编译并移植到ARM开发板

    在上一文《QT学习笔记-QT安装oracle oci驱动》中介绍了在Windows环境下使用QT访问oracle数据库时遇到驱动无法加载问题的解决办法,大体思路是对QT源码中数据库驱动的源码oci进行编译,要想通过编译需要依赖对应数据库的头文件和库(可以通过下载oracle instant client),编译通过

    2024年02月13日
    浏览(44)
  • 【Qt 学习笔记】Qt 开发环境的搭建 | Qt 安装教程

    博客主页:Duck Bro 博客主页 系列专栏:Qt 专栏 关注博主,后期持续更新系列文章 如果有错误感谢请大家批评指出,及时修改 感谢大家点赞👍收藏⭐评论✍ 文章编号:Qt 学习笔记 / 02 1. 安装包下载(网盘链接) 链接:https://pan.baidu.com/s/1t3jbYcFYFuJIfe0hPmeDmQ?pwd=duck 提取码:du

    2024年04月26日
    浏览(50)
  • 嵌入式Linux:ARM驱动+QT应用+OpenCV人脸识别项目实现

            这个项目主要分为两部分,客户端(ARM板端)负责利用OpenCV采集人脸数据,利用TCP将人脸数据发送给服务器,然后服务器根据人脸数据进行人脸识别,将识别后的结果返还给客户端,客户端对人脸数据进行解析,得到正确的人脸数据后,打开门锁。门锁涉及硬件操作

    2024年02月10日
    浏览(35)
  • Linux 打包Qt程序到无Qt环境Linux系统下运行,问题记录

    Linux 环境下Qt开发的摄像头程序用到了opencv的库,需要跟Qt环境一起打包。 1.打包所有关联库用的是脚本程序。 2.新建空文件夹放入编译好的release qt程序,比如摄像头程序 camera,新建打包脚本copylib.sh放在文件夹下。   3.终端执行 ./copylib.sh camera 会打包 camera程序所需的关联库。

    2024年02月16日
    浏览(33)
  • Qt Linux 环境中应用程序打包

    系统环境:Ubuntu20.04LTS 开发环境:Qt5.14.1 在进入程序部署打包之前,阅读官方的部署文档Deploy,通常情况下,我们在开发的时候,Qt Creator 的左下角构建模式为Debug,便于我们调试编写程序。Qt的三个构建模式Debug、Profile、Release的区别是: debug可以调试程序,而release不可以。在

    2024年02月01日
    浏览(26)
  • Linux下打包发布QT程序,并运行在其他没有安装QT环境的linux系统上

    一、Linux下打包发布步骤如下 编译应用程序环境:ubuntu18.04版本 开发环境:Qt5.14.2 编译环境:gcc_64 要移植的电脑:ubuntu18.04版本,没有开发环境 第一步:打包依赖库 1、创建一个打包目录,把生成的可执行文件拷贝放在创建的打包目录下,这里我是创建了一个打包目录名称为

    2024年02月12日
    浏览(30)
  • QT学习笔记-开发环境编译Qt MySql数据库驱动与交叉编译Qt MySql数据库驱动

    如果需要在QT程序中实现与MySQL数据库的交互,那么必不可少的一环就是对Qt MySql数据库驱动的编译。 操作系统:Windows10 专业版 64位 Qt版本:Qt 5.15.2 开发环境Qt安装路径:D:Qt 交叉编译服务器:Ubuntu 18.4 交叉编译服务器Qt安装路径:/opt/Qt 目标芯片:rk3568 目标平台:arm64 Qt安装

    2024年02月11日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包