原文地址:http://adamcavendish.is-programmer.com/posts/40431.html
问题描述:
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
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,就不会有报错了。