Qt 5.1.0 on Ubuntu Linux、MySQLデータベースエラー(driver not loaded)

4009 ワード

原文の住所: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+++がわかれば、ライブラリのファイル依存問題が一番頭が痛いです。
もしあなたがuuntu linuxの下で公式のインストールパッケージを通じてインストールされたQtなら、MySQLプラグインは必ず下のフォルダにあります。
$QT_INSTALL_PLACE/$QT_VERSION_NUMBER/$COMPILE_TOOL_KIT_NAME/plugins
(私の該当環境は以下の通りです。/opt/Qt 5.1/5.1.0/gccc 64/plugins/フォルダ下)
もしあなたがappt-getを通じてデフォルトのQt 5パッケージのファイルをインストールするなら、プラグインは必ず次のいくつかのフォルダの下にあります。
/usr/lib/i386-linux-gnu/$QT_VERSION/plugins/ for 32bits ubuntu
または
/usr/lib/x86_64-linux-gnu/$QT_VERSION/plugins/ for 64bits ubuntu
では、mysqlドライバがあるかどうかをどうチェックします。次の手順を押せばいいです。
上記のプラグインディレクトリを開く、すなわちplugisディレクトリです。
pluginsディレクトリのsqldriversディレクトリを開きます。
libqsql.soというライブラリファイルがありますか?
このライブラリのファイルが存在するなら、QSql Databaseのドライブで見つけられます。
確かに見つけたのですが、間違えたということは、誤操作やmysql更新によってライブラリファイルが使えなくなるということです。
下のコードでライブラリファイルの依存性を確認できます。
ldd libqsqlmysql.so
私の環境下では以下のエラーが発生します。
libmysql client_r.so.16=>not found――ライブラリのファイル依存が正しく完成していないことを説明します。(なぜですか?Qtをインストールしてから、mysqlのインストールパッケージを更新しました。)
どのように解決してそのプロジェクトをコンパイルして最新のqtソースコードをダウンロードしますか?これを解凍してQtbase/src/plugins/sqldrivers/mysql/このディレクトリに入ります。注:それら自身は公式のインストールパッケージからQtをインストールします。あなたのインストールルートディレクトリにSrcのディレクトリがあります。qtbaseが必要なソースコードを見つけたらダウンロードしないでください。コマンドを実行します。
>> qmake
>> make
彼はこのディレクトリqtbase/plugins/sqldrivers/の下でもう一度そのライブラリファイルを生成します。
この再コンパイルされたプラグインライブラリを再確認します。
>>ldd libql mysql.so
私の環境では次の情報が生成されます。
libmysql client.so.18=>/usr/lib/x 86_64-linux-gnu/libmysql client.so.18(0 x 00007 f 98 f 988 d 000) 
このライブラリのファイル依存性が解決されたということです。
このライブラリのファイルを前に言ったフォルダにコピーして、前のファイルを置き換えればいいです。
前のディレクトリは以下の通りです。
$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を実行する過程で、この警察に通報します。
このような状況に遭遇したら、慌てないでください。libmysql client-devをインストールしていないだけです。ap-getだけでいいです。再度makeしたら、エラーがありません。