まず、以下のように、私の問題を貼り付けます。
1 |
QSqlDatabase:QMYSQLドライバがロードされていません |
この問題を解決するには、最初のチェックは、オンラインで様々な解決策が、試してみましたが、常に解決策を見つけるいくつかの小さな問題が発生し、最終的に質問に「スタックオーバーフローは、」答えを得ていますしたがって、また、一部の人に助けを願って、再び別の後に、それを記録。
環境:ubantu16.04 + Qt5.7 + MySql5.7
分析
まず、彼らはうまくインストールされているかどうかを判断のMySQL(インストール後、インストールされていない)
もアンインストールへのリンクが含まれているインストール方法:()
http://blog.csdn.net/yimi0903/article/details/11800713
以下のコマンドを実行して、その後これらのオプションがインストールされているかどうかを確認するには:1
sudoのlibmysqlclientの-devのインストールapt-getを
ディレクトリにドライブ:
1
CD /ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers
LSは、ファイルやフォルダを表示します。
1
2CC @ 1whispers:〜/ PROGRAMFILES / Qt5.7.0 / 5.7 / gcc_64 /プラグイン/ sqldrivers $ lsの
libqsqlite.so libqsqlmysql.so libqsqlpsql.so実行ビューlibqsqlmysql.so依存性:
1
LDD libqsqlmysql.so
それを以下に示します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27Linuxベースvdso.so.1 =>(0x00007ffcb64e2000)
libmysqlclient_r.so.16 =>が見つかりません
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1(0x00007fea06463000)
libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1(0x00007fea0622a000)
libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1(0x00007fea06011000)
libssl.so.10 => /usr/lib/x86_64-linux-gnu/libssl.so.10(0x00007fea05dba000)
libQt5Sql.so.5 => /home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/./../ ../lib/libQt5Sql.so.5(0x00007fea05b74000)
libQt5Core.so.5 => /home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/./../../lib/libQt5Core .so.5(0x00007fea05459000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0(0x00007fea0523c000)
libstdc ++。so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6(0x00007fea04eb9000)
にlibm.so.6 => /lib/x86_64-linux-gnu/libm.so.6(0x00007fea04bb0000)
libgcc_s.so.1が=> /lib/x86_64-linux-gnu/libgcc_s.so.1(0x00007fea0499a000)
libc.so.6と=> /lib/x86_64-linux-gnu/libc.so.6(0x00007fea045d0000)
libnss3。そう=> /usr/lib/x86_64-linux-gnu/libnss3.so(0x00007fea0428a000)
libnssutil3.so => /usr/lib/x86_64-linux-gnu/libnssutil3.so(0x00007fea0405d000)
libplc4.so =>は/ usr / libに/ x86_64の-linuxの-GNU / libplc4.so(0x00007fea03e57000)
libnspr4.so => /usr/lib/x86_64-linux-gnu/libnspr4.so(0x00007fea03c18000)
libicui18n.so.56 => /ホーム/ CC / PROGRAMFILES / Qt5.7.0 / 5.7 / gcc_64 /プラグイン/ sqldrivers /./../../のlib / libicui18n.so.56(0x00007fea0377d000)
libicuuc.so.56 => /home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/./../../lib/libicuuc.so.56(0x00007fea033c5000)
libicudata.so.56 = > /home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/plugins/sqldrivers/./../../lib/libicudata.so.56(0x00007fea019e2000)
libdl.so.2 => / LIB / x86_64- LinuxベースのGNU / libdl.so.2(0x00007fea017dd000)
libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0(0x00007fea015db000)
librt.so.1 => / libに/ x86_64の-linuxの-GNU / librt.so.1(0x00007fea013d3000)
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0(0x00007fea010c2000)
/ lib64に/ LD-linuxの-x86-64.so.2(0x0000560757219000)
libplds4.so => /usr/lib/x86_64-linux-gnu/libplds4.so(0x00007fea00ebd000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3(0x00007fea00c4d000)ここで問題があります:libmysqlclient_r.so.16 =>が見つかりません、この依存性のない説明がありませんので、今、私たちが解決しなければならない、この依存性があります。
あなたのlibmysqlclient.soのすべてを見ます
1
2
3
4
5
61whispers @ CC:〜$探しlibmysqlclient.so
/home/cc/Desktop/libmysqlclient.so.20
/usr/lib/x86_64-linux-gnu/libmysqlclient.so
は/ usr / libに/ x86_64の-linux- 大きな柱 Qt5.7は、ロードされたMySQLドライバの問題ではない(再コンパイルドライバに必要) GNU / libmysqlclient.so.20
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.20.3.0我々は、これらの依存ことがわかりました。
コンパイルMySQLドライバ
注:多くの場合、このような場合は、どのようなネットワークのドキュメントを教えてください見てすることをお勧めします
http://doc.qt.io/qt-5/sql-driver.html#qmysql
ソースがインストールされていない場合、私たちはまず、あなたがリコール選挙、そのソースにインストールするとき覚えて、Qtのを再インストールする必要があります、あなたはQtのインストール時にそのソースがインストールされているかを決定しなければなりません。
ソースドライバMySQLでのソースコードに
1
CD /ProgramFiles/Qt5.7.0/5.7/Src/qtbase/src/plugins/sqldrivers/mysql
パスは、それぞれのインストールQTからのパスです。
コンパイル:
qmake-> make-> make installを
実行プロセスを:1
2
3
4
5sudo /home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/bin/qmake "INCLUDEPATH+=/usr/include/mysql" "LIBS+=-L/usr/lib/mysql -lmysqlclient_r" mysql.pro
sudo make
sudo make install在查看依赖 ldd libqsqlmysql.so ,则会看到已有依赖库.
再去运行程序,则会显示成功连接数据库.1
Database connection established
这是记得要sudo make clean清理一下之前编译的中间文件.
可能出现的问题
执行qmake的时候: qmake “INCLUDEPATH+=/usr/include/mysql” “LIBS+=-L/usr/lib/mysql -lmysqlclient_r” mysql.pro这样的命令是用的默认的qmake文件,这样如果没有Qt4的SDK,则会出错,所以需要用我们自己安装Qt时路劲下的qmake.
1
sudo /home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/bin/qmake "INCLUDEPATH+=/usr/include/mysql" "LIBS+=-L/usr/lib/mysql -lmysqlclient_r" mysql.pro
需要加上sudo,不然会出现 not permit的错误,即没有权限,所以需要用root权限.
在执行make的时候,也需要用到root权限.不然会出现以下错误(我本人就是死在这里,因为没有用root权限,但是出现错误又不懂什么原因,迷茫了2天,终于解决)
1
2
3
4home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/bin/moc -DQT_NO_MTDEV -DQT_NO_LIBUDEV -DQT_NO_TSLIB -DQT_NO_LIBINPUT -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -I/home/cc/ProgramFiles/Qt5.7.0/5.7/Src/qtbase/mkspecs/linux-g++ -I/home/cc/ProgramFiles/Qt5.7.0/5.7/Src/qtbase/src/plugins/sqldrivers/mysql -I/home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/include/QtSql/5.7.0 -I/home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/include/QtSql/5.7.0/QtSql -I/home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/include/QtCore/5.7.0 -I/home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/include/QtCore/5.7.0/QtCore -I/home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/include -I/home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/include/QtSql -I/home/cc/ProgramFiles/Qt5.7.0/5.7/gcc_64/include/QtCore -I/usr/include/c++/5 -I/usr/include/x86_64-linux-gnu/c++/5 -I/usr/include/c++/5/backward -I/usr/lib/gcc/x86_64-linux-gnu/5/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include main.cpp -o .moc/main.moc
moc: Cannot create .moc/main.moc
Makefile:652: recipe for target '.moc/main.moc' failed
make: *** [.moc/main.moc] Error 1使用证确方式(sudo make)执行后肯能会出现以下问题:
1
2
3
4
5-lQt5Sql -lQt5Core -lpthread
/usr/bin/ld: cannot find -lmysqlclient_r
collect2: error: ld returned 1 exit status
Makefile:114: recipe for target '../../../../plugins/sqldrivers/libqsqlmysql.so' failed
make: *** [../../../../plugins/sqldrivers/libqsqlmysql.so] Error 1我々はlmysqlclient_r関係書類を持っていないことを示しています。libmysqlclient_r.so及びその他の文書がないこと、しかし、前に分析したとき、我々が持っていることを知っています
1
2
3
4
5
6
7
8
9
10
11/home/cc/Desktop/libmysqlclient.so.20
/usr/lib/x86_64-linux-gnu/libmysqlclient.so
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.20
は/ usr / libに/ Linuxの-x86_64版- GNU / libmysqlclient.so.20.3.0
`` `
その関連ファイルlmysqlclient_rをリンクするために行く;
` `` bashの
CDは/ usr / libに/ x86_64版- GNU-Linuxの/
LN -s libmysqlclient.so.20.3.0 libmysqlclient_r .so.20.3.0
LN -s libmysqlclient.so.20 libmysqlclient_r.so.20
LN -s libmysqlclient.so libmysqlclient_r.soだから、sudoのメイクを実行するために、あなたは成功するでしょう。