原文地址:http://adamcavendish.is-programmer.com/posts/40431.html
问题描述:
QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7 false引起报错的示例代码如下:
#include <QCoreApplication> #include <QtSql> 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
ldd libqsqlmysql.so在我的环境下会得到以下报错
怎么解决
重新编译那个工程
下载最新的qt源代码(下载文件应该叫“qt-everywhere-opensource-src-version".tar.gz)
解压这个然后进入qtbase/src/plugins/sqldrivers/mysql/ 这个目录下。
注:那些本身从官方安装包安装Qt,在你的安装根目录目录会有个Src的目录,找到qtbase就是你需要的源代码,就不要去下载了。
执行以下命令
>> qmake >> make他会在这个目录qtbase/plugins/sqldrivers/下再次生成那个库文件
$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,就不会有报错了。