当前位置: 首页 > 工具软件 > ODBC Shell > 使用案例 >

linux下qt的odbc库编译,如何在 静态编译的QT 5.5.1 中 使用数据库插件连接 ODBC(调用静态插件)...

锺离马鲁
2023-12-01

前段时间由于工作的关系,需要编写一个将数据插入到 Sql server 2012 的桌面软件。

由于之前使用的是MFC,偶然间接触到了Qt后,被它的简洁惊艳到了,于是便毅然而然的转投到了Qt的怀抱,哈哈……

废话不多说,我使用的是最新的Qt 5.5.1版本(Qt 5.5.1 for Windows 32-bit MinGW), 在一路查看帮助文档后,

终于是把程序编译出来,正常运行了。正当我满心欢喜的交付出去的时候,遇到问题了,程序在对方的电脑上运行时,

提示缺少动态库!而且不同电脑缺少的库还不一定相同!费劲心思找好缺少的库后,原本满满的成就感就降低了许多……

在网上寻求的帮助过程中,我想到了静态编译的方式……

说做就做,按着官方网站的说明,无脑照搬步骤编译出来了静态

版本,但是在使用的时候出问题了:

运行的时候提示:

"Driver not loaded Driver not loaded"

Available drivers:

"QSQLITE"

擦,原来默认没把odbc的驱动编译进去,好吧,按照Qt帮助文档的说明编译出了  libqsqlodbcd.a 、libqsqlodbc.a

这两个文件,然后想当然地把这两个文件放到 %QT/plugins的sqldrivers文件夹下,你猜怎么着,根本就没有这个文件夹!

好吧,既然没有,那我就给你建立一个,但还是没什么鬼用……

终于,皇天不负有心人,我了解到,我现在使用ODBC驱动的方式 叫做“调用静态插件”, Qt正好有那么篇介绍的文章:

按照上面的说明,在.pro 文件中加入如下语句:

QTPLUGIN+= qsqlodbc

并在.cpp文件中添加语句:

#include

Q_IMPORT_PLUGIN(QODBCDriverPlugin)

这里要说一下,插件的名字,也就是这里的“QODBCDriverPlugin”,去哪里找呢?这得到我们编译这个驱动的.pro文件中找,这里是 odbc.pro,

(目录: %Qt\src\qt-everywhere-opensource-src-5.5.1\qtbase\src\plugins\sqldrivers\odbc)。

另外,还要把和 .a库一起编译出来的两个 .prl 文件放到 %Qt\lib 目录下,并编辑这两个文件,把里面 QMAKE_PRL_LIBS 中的静态库路径修改成你编译出来的静态库的路径。

做完以上的,就执行一次 clean ,qmake 重新编译就OK了,这时候是不是能连接上了啊,哈哈……(这过程的心酸,终于换来了收获的喜悦……啊啊啊)

下面附上测试的 Demo 代码

staticTest.pro

#-------------------------------------------------

#

# Project created by QtCreator 2016-01-16T20:55:32

#

#-------------------------------------------------

QT       += core gui sql

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

QTPLUGIN += qsqlodbc

TEMPLATE = app

SOURCES += main.cpp\

mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

---------------------------------------------------

mainwindow.cpp

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include 

#include 

#include 

#include 

#include 

Q_IMPORT_PLUGIN(QODBCDriverPlugin)

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);

}

MainWindow::~MainWindow()

{

delete ui;

}

void MainWindow::on_pushButton_clicked()

{

qDebug()<

QSqlDatabase qDB = QSqlDatabase::addDatabase("QODBC");

qDB.setHostName("127.0.0.1");

qDB.setDatabaseName("Driver={sql server};server=127.0.0.1;database=MyTempDB;");

qDB.setUserName("sa");

qDB.setPassword("123456");

bool IsOpen = qDB.open();

if(IsOpen)

{

qDebug()<

}

else

{

qDebug()<

QSqlError qerror = qDB.lastError();

qDebug()<

}

qDebug() <

QStringList drivers = QSqlDatabase::drivers();

foreach(QString driver, drivers)

qDebug() <

}

*/

*--------------------------------------

** Edit by : 小菜

** Time:     2016-01-19

*--------------------------------------

*/

http://blog.csdn.net/humadivinity/article/details/50545100

VS2010使用静态编译的qt库(Qt 5)

Qt 5引入了一种新的编写方式. Qt开发界面很方便,但发布程序就不那么方便了,你的把引用到的dll一起发布才行,要是能静态编译就好了,发布的时候只有一个exe多方便. 虽然以前为了方便,直接安装的q ...

VS2010使用静态编译的qt库

Qt开发界面很方便,但发布程序就不那么方便了,你的把引用到的dll一起发布才行,要是能静态编译就好了,发布的时候只有一个exe多方便. 虽然以前为了方便,直接安装的qt-windows-opensou ...

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

When compiling Qt you can choose one of these options based on the configure command line: no OpenSS ...

VS2010 win7 QT4&period;8&period;0,实现VS2010编译调试Qt程序,QtCreator静态发布程序

下载源代码,注意一定是源码压缩包如qt-everywhere-opensource-src-4.8.0.zip, 不是Qt发布的已编译的不同版本的标准库如qt-win-opensource-4.8.0 ...

记录下 QT Linux 静态编译遇到的坑

Qt下静态编译Qt,根据我的经验,如果按照Windows下那种直接拿官方sdk安装之后的文件来编译是行不通的,需要直接下载Qt的source包,目前诺基亚的源码叫做qt-everywhere-open ...

Linux下快速静态编译Qt以及Qt动态&sol;静态版本共存

Qt下静态编译Qt,根据我的经验,如果按照Windows下那种直接拿官方sdk安装之后的文件来编译是行不通的,需要直接下载Qt的source包,目前诺基亚的源码叫做qt-everywhere-open ...

Linux&sol;Ubuntu下 静态编译Qt程序

一般情况下,我们用Qt编译出来的程序是要依赖于系统Qt库的,也就是这个程序移到别的没有安装Qt库的系统上是不能使用的.会提示缺少……库文件之类的错误.这就是动态编译的结果. 但是如果我们想编译一个程序 ...

Linux下静态编译Qt程序

一般情况下,我们用Qt编译出来的程序是要依赖于系统Qt库的,也就是这个程序移到别的没有安装Qt库的系统上是不能使用的.会提示缺少……库文件之类的错误.这就是动态编译的结果. 但是如果我们想编译一个程序 ...

亲测VS2010纯静态编译QT4&period;8&period;0,实现VS2010编译调试Qt程序,QtCreator静态发布程序(图文并茂,非常详细)

下载源代码,注意一定是源码压缩包如qt-everywhere-opensource-src-4.8.0.zip,不是Qt发布的已编译的不同版本的标准库如qt-win-opensource-4.8.0- ...

随机推荐

AFNetworking 3&period;0 源码解读 总结

终于写完了 AFNetworking 的源码解读.这一过程耗时数天.当我回过头又重头到尾的读了一篇,又有所收获.不禁让我想起了当初上学时的种种情景.我们应该对知识进行反复的记忆和理解.下边是我总结的 ...

linux脚本编程&lpar;shell&rpar;浅介 (转载)

linux脚本(shell)编程 啊,昨天上网看到一篇讲 linux/unix shell 的文章,想想自己最后写这东西也是一年前的事了,想想都快忘光了. 还是整理一下,做一次回顾,以后说不定还用得上 ...

10个国内外jQuery的CDN性能大比拼

jQuery是前端开发最常见也是最流行的javascript库,如何去加载它才能使我们的项目性能更好以及问什么要用CDN?当用户访问自己的站点时从服务器加载文件,每个服务器同时只能下载2-4个文件,这 ...

tomcat 内存溢出

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入Perm ...

一&period;JSP开发的工具下载与环境搭建

JSP技术的强势: (1)一次编写,到处运行.在这一点上Java比PHP更出色,除了系统之外,代码不用做任何更改. (2)系统的多平台支持.基本上可以在所有平台上的任意环境中开发,在任意环境中进行系统 ...

js学习笔记之:时间(三)

今天来学习一个简单的时间应用:时间的倒影,如图所示:   主要知识点: 1  获取系统的时间值:2 建立一个div的倒影 div的倒影主要利用css来控制,函数值为:filter:flipv() 步骤 ...

在Storyboard中为UITableView添加Header和Footer

我在这里所说的Header和Footer并不是sectionHeader和sectionFooter,而是指UITableView的tableHeaderView和tableFooterView,这两 ...

vue动画及其原理

1,vue动画的实现原理,主要是通过在不同时期给需要动画的dom元素加上css动画样式 我们以显示和隐藏动画为例 a, 需要动画的dom元素 b,点击时vue控制往vue中加的样式 2,  我们以两张 ...

activate-power-mode 插件 安装 设置 IDEA

作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E-mail: 313134555 @qq.com 可用 摇 shake 粒子 particle ...

H3C常用配置和命令

邻居发现命令display lldp neighbor-information list DHCP中继配置dhcp enabledhcp relay server-group 1 ip x.x.x.x ...

 类似资料: