ubuntu qt编译mysql报错_Qt 5.1.0 on Ubuntu Linux, MySQL数据库报错 (driver not loaded)

问题描述:

QSqlDatabase: QMYSQL driver not loaded

QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7

false引起报错的示例代码如下:

#include

#include

int main(int argc, char *argv[])

{

QCoreApplication a(argc, argv);

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

db.setHostName("localhost");

db.setDatabaseName("test");

db.setUserName("test");

db.setPassword("xxxxxxxxxx");

bool ok = db.open();

qDebug() << ok;

db.close();

return a.exec();

}

尼玛是什么玩意?

明明mysql就属于已有驱动,为什么还要报这样的错误呢?

好吧,忽略我发牢骚吧。咱们进入正题。

为什么会这样,解释如下:

不管有没有报这错,如果你懂C++,你一定知道库文件的依赖问题最头疼了(好吧,貌似这不仅仅是C++才会遇到的问题)

如果你在ubuntu linux下通过官方安装包进行安装的Qt,那么MySQL插件一定在下面文件夹里。

$QT_INSTALL_PLACE/$QT_VERSION_NUMBER/$COMPILE_TOOL_KIT_NAME/plugins

(我的相应环境如下:/opt/Qt5.1/5.1.0/gcc_64/plugins/文件夹下)

如果你是通过apt-get安装默认的Qt5包文件,那么插件一定是在下面几个文件夹下:

/usr/lib/i386-linux-gnu/$QT_VERSION/plugins/ for 32bits ubuntu

或者

/usr/lib/x86_64-linux-gnu/$QT_VERSION/plugins/ for 64bits ubuntu

那么怎么检查有没有mysql驱动呢,按着下面步骤就可以了。

打开上述的插件目录,即plugins目录

打开plugins目录下的sqldrivers目录

检查是不是有一个叫libqsqlmysql.so的库文件

如果这个库文件存在,那么你可以在QSqlDatabase的可用驱动找到它。

然而的确是找到却还是要报错,应该会是因为误操作或是mysql更新导致库文件不能使用。

通过下面的代码可以检查库文件的依赖性。

ldd libqsqlmysql.so在我的环境下会得到以下报错

libmysqlclient_r.so.16 => not found ---- 说明库文件依赖未能正确完成。(至于为什么会这样?应该是在我安装Qt之后,我更新了mysql的安装包)

怎么解决

重新编译那个工程

下载最新的qt源代码(下载文件应该叫“qt-everywhere-opensource-src-version".tar.gz)

解压这个然后进入qtbase/src/plugins/sqldrivers/mysql/ 这个目录下。

注:那些本身从官方安装包安装Qt,在你的安装根目录目录会有个Src的目录,找到qtbase就是你需要的源代码,就不要去下载了。

执行以下命令

>> qmake

>> make他会在这个目录qtbase/plugins/sqldrivers/下再次生成那个库文件

我们再次检查这个重编译的插件库

>> ldd libqsqlmysql.so

在我的环境下会生成下面信息:

libmysqlclient.so.18 => /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18 (0x00007f98f988d000)

说明这个库文件依赖性已经解决了。

把这个库文件拷贝到之前所说的那个文件夹下,将之前的替换掉即可。

之前目录如下:

$QT_INSTALL_PLACE/$QT_VERSION_NUMBER/$COMPILE_TOOL_KIT_NAME/plugins或者

/usr/lib/i386-linux-gnu/$QT_VERSION/plugins/或者

/usr/lib/x86_64-linux-gnu/$QT_VERSION/plugins/如果你还是遇到这个问题,很有可能是你环境没配好,那就重新配一下吧。

export PATH="$QT_INSTALL_PLACE/$QT_VERSION_NUMBER/$COMPILE_TOOL_KIT_NAME/bin/":$PATH

export LD_LIBRARY_PATH="$QT_INSTALL_PLACE/$QT_VERSION_NUMBER/$COMPILE_TOOL_KIT_NAME/lib/":$LD_LIBRARY_PATH

export LD_LIBRARY_PATH="$QT_INSTALL_PLACE/$QT_VERSION_NUMBER/$COMPILE_TOOL_KIT_NAME/plugins/":$LD_LIBRARY_PATH

export LIBRARY_PATH="$QT_INSTALL_PLACE/$QT_VERSION_NUMBER/$COMPILE_TOOL_KIT_NAME/lib/":$LIBRARY_PATH

export LIBRARY_PATH="$QT_INSTALL_PLACE/$QT_VERSION_NUMBER/$COMPILE_TOOL_KIT_NAME/plugins/":$LIBRARY_PATH我的环境是这样的:

export PATH="/opt/Qt5.1/5.1.0/gcc_64/bin/":$PATH

export LD_LIBRARY_PATH="/opt/Qt5.1/5.1.0/gcc_64/lib/":$LD_LIBRARY_PATH

export LD_LIBRARY_PATH="/opt/Qt5.1/5.1.0/gcc_64/plugins/":$LD_LIBRARY_PATH

export LIBRARY_PATH="/opt/Qt5.1/5.1.0/gcc_64/lib/":$LIBRARY_PATH

export LIBRARY_PATH="/opt/Qt5.1/5.1.0/gcc_64/plugins/":$LIBRARY_PATH这说明你把插件目录也放在库路径里面去了。

特别注意一下:

你可能编译不成功,报警如下:

mysql.h头文件不存在,在执行make的过程中,会报这个警。

如果你遇到这样的情况,不要慌张,你只是没有安装libmysqlclient-dev,你只需apt-get它一下就可以了,再次make,就不会有报错了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值