qmysql
Qtにドライバーをロードするにはどうすればよいですか? これらの結果を生成する次のコードがあります。
("QSQLITE", "QMYSQL", "QMYSQL3")
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3
それをロードする方法に関する提案はありますか?
最初にドライバーを確認する必要があります
$ cd /opt/Qt5.2.1/5.2.1/gcc_64/plugins/sqldrivers
次に、いくつかのファイルを見つけることができます
以下のコマンドを使用してライブラリを確認します
$ ldd libqsqlmysql.so
問題が見つかった場合libmysqlclient_r.so.16 => not found
は、ライブラリ依存の問題である可能性があります。
インターネットで少し調べたところ、簡単な方法があります。
$ cd /usr/lib/x86_64-linux-gnu
あなたが見つけたらlibmysqlclient_r.so.18
、
$ cp libmysqlclient_r.so.18 libmysqlclient_r.so.16
sqldrivers
フォルダーをデバッグフォルダーにコピーするだけで機能し、機能しました!
問題を診断してみることができますstrace
- QMYSQL ドライバーが機能するには、ランタイム ライブラリの依存関係が必要なようです。
を使用QPluginLoader
して、より適切なエラーメッセージを取得できます。
MySQLドライバーで同じ問題が発生したとき、メッセージは「バージョンはこのQtバージョン以外のオプションでコンパイルされました」のようなものでした。
当時QtSDKに同梱されていたQtソースは、そのバイナリと互換性がないようでした。
Qtソースをダウンロードし、自分のバージョンのQtとMySQLドライバーをコンパイルした後、問題は解決しました。
編集:いくつかのサンプルコード。
QPluginLoader loader;
loader.setFileName("/Users/niklaswulf/QtSDK/Qt/4.8.4/plugins/sqldrivers/libqsqlite_debug.dylib");
qDebug() << loader.load();
qDebug() << loader.errorString();
loader.setFileName("/Users/niklaswulf/QtSDK/Qt/5.0.1/5.0.1/clang_64/plugins/sqldrivers/libqsqlite_debug.dylib");
qDebug() << loader.load();
qDebug() << loader.errorString();
5.0.1に対してコンパイルする場合、これは次の出力です。
false
"The file '/Users/niklaswulf/QtSDK/Qt/4.8.4/plugins/sqldrivers/libqsqlite_debug.dylib' is not a valid Qt plugin."
true
"Unknown error"
私も古いメッセージを見つけました:
The plugin '/path/to/some/libqsqlmysql.dylib' uses incompatible Qt library. Expected build key "macosx macx-cocoa g++-4 full-config", got "macosx macx-cocoa g++-4 no-pkg-config"
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3
Qt-5.2.0 を使用した fedora20 (64 ビット) で直面した同じ問題で、次の手順に従います。
$ cd /opt/Qt5.2.0/5.2.0/gcc_64/plugins/sqldrivers
$ ls
libqsqlite.so libqsqlmysql.so
以下のコマンドを使用して、ライブラリの依存関係を確認します。
$ ldd libqsqlmysql.so
私は問題を見つけます:
libmysqlclient_r.so.16 => not found
ライブラリ依存の問題かもしれません。この問題を解決してください:
ライブラリ ファイルのリンク:
$ ln -s libmysqlclient_r.so.16.0.0 libmysqlclient_r.so
そしてまた:
$ ln -s libmysqlclient_r.so.16.0.0 libmysqlclient_r.so.16
今は私のために働いています。ではごきげんよう
ここに、この問題に関する非常に優れたリンクがいくつかあります。
Unix ベースのシステムで手動でプラグインを作成する (Qt ドキュメントから): http://qt-project.org/doc/qt-5/sql-driver.html
特にこの問題に関する非常によく書かれたリンク (ソースから Qt をインストールすることを忘れないでください。これは、.run 実行可能ファイルからインストールするときに最初のステップで対応する (非表示の) ボックスをチェックするか、「 qt-everywhere-opensource-src' バージョン): http://adamcavendish.is-programmer.com/posts/40431.html
楽しんで、ペイマン
私の答え:
QSqlDatabase db(QSqlDatabase::addDatabase("QMYSQL"));
db.setDatabaseName("dbname");
db.setHostName("localhost");
db.setUserName("usernm");
db.setPassword("password");
if (db.open())
{
qDebug() << "SUCCESS!";
db.close();
}