2016-10-06 6 views
0

MySQLデータベースに接続できなかったこの問題が発生しました。しかし、this答えは私のために働いた。問題は次のとおりです。「libmysql.dll」と「libmysql.lib」をMySQLを使用するすべてのプロジェクト(「Basti Vagabond」で述べたように)にコピーアンドペーストしたくありません。QMYSQLドライバがロードされていません(他の解決方法?)

この問題を解決する他の方法はありますか?

私のケースは、上記のリンクのものとまったく同じです。

+1

ようこそ:あなたはOSの特定のコマンド


コンパイラの出力でこれを記述する必要があります他のオペレーティングシステムについては Windows上のライブラリ – peppe

答えて

1

あなたは、このプロセスを自動化するカップルのオプションがあります。

一つの方法は、あなたのmain.cppにライブラリのパスを追加することです。

qApp->addLibraryPath("C:\\path\\something\\mysql.dll"); 

それとも、全体のプロセスを自動化:

From Qt Docs:

QMAKE_POST_LINK
は一緒にTARGETをリンクした後に実行するコマンドを指定します。この変数は通常は空であるため、何も実行されません。


# If operating system is Windows perform this V 
win32 { 
    # Create variable containing the path to your project compile folder (probably no need to change since this is automated by Qt) 
    OUT_PWD_WINDOWS   = $$OUT_PWD 
    # Switch frontslashes with double backslashes 
    OUT_PWD_WINDOWS   ~= s,/,\\,g 

    # Create variables to set debug path and release path 
    # Gotta change the \\debug and \\release to the correct debug and release folders 
    OUT_PWD_WINDOWS_DEBUG = $$quote($$OUT_PWD_WINDOWS\\debug ) 
    OUT_PWD_WINDOWS_RELEASE = $$quote($$OUT_PWD_WINDOWS\\release) 

    # Create variables to set the path to libs and dlls you want to copy (*.lib will copy all files ending in .lib from the specified path) 
    # you can change that however to mysql.lib for example if you only want 1, same goes for .dll 
    LIBS_TO_COPY   = $$quote(C:\\MySql\\libs\\*.lib) 
    DLLS_TO_COPY   = $$quote(C:\\MySql\\libs\\*.dll) 


    # Copy libraries and dlls into debug path/else copys them into the release folder 
    # essentially this is saying if(config == debug) perform tasks else perform tasks for release, which is add actions to be executed after linking 
    CONFIG(debug , debug|release) { 
     # Here we add the copy command to the QMAKE_POST_LINK variable which will be executed once the linking is done 
     # We have 1 entry for libs and 1 for dlls, same goes for the release which is in the else 
     QMAKE_POST_LINK += $$quote(xcopy $$LIBS_TO_COPY $$OUT_PWD_WINDOWS_DEBUG $$escape_expand(\n\t)) 
     QMAKE_POST_LINK += $$quote(xcopy $$DLLS_TO_COPY $$OUT_PWD_WINDOWS_DEBUG $$escape_expand(\n\t)) 
    } else { 
     QMAKE_POST_LINK += $$quote(xcopy $$LIBS_TO_COPY $$OUT_PWD_WINDOWS_RELEASE $$escape_expand(\n\t)) 
     QMAKE_POST_LINK += $$quote(xcopy $$DLLS_TO_COPY $$OUT_PWD_WINDOWS_RELEASE $$escape_expand(\n\t)) 
    } 
} 

今、名前の変更/ビルドフォルダを削除、あなたの.proファイルでこれを入れて、パスの調整を行うと、あなたはどこに供給されたこれらのライブラリを持っているあなたの.proのすべてのファイルにこれを貼り付けることができますそれらが必要です。

.proファイルに読み込むマクロ/キーバインド/スニペットを作成することで、それを自動化することもできます。


サイドノート:共有の幻想的な世界へ

xcopy C:\Actions\*.lib C:\Users\xyz\dev\C++\Qt\build-Test-Desktop_Qt_5_7_0_MSVC2015_64bit-Debug\debug 
C:\Actions\Test - Copy (2).lib 
C:\Actions\Test - Copy.lib 
C:\Actions\Test.lib 
3 File(s) copied 
xcopy C:\Actions\*.dll C:\Users\xyz\dev\C++\Qt\build-Test-Desktop_Qt_5_7_0_MSVC2015_64bit-Debug\debug 
C:\Actions\test - Copy (2).dll 
C:\Actions\test - Copy.dll 
C:\Actions\test.dll 
3 File(s) copied 
01:45:08: The process "C:\Qt\Qt5.7.0\Tools\QtCreator\bin\jom.exe" exited normally. 
+0

ですが、すべてのプログラムでこれを行う必要はありませんか?問題の原因に戻ります。「毎回コードをコピーして貼り付けることなくMySQLを使用する方法」です。 – andseg

+0

また、2番目の選択肢はすばらしく見えますが、私はその多くを理解していませんでした。もう少し説明できますか?私は比較的新しいです。 'win32 {}'はQt cmdやプロジェクト自体にあると思われますか? – andseg

+0

@andsegいくつかのことをもっと明確にすることができればそれを編集しますが、全体のパッケージは.pro – deW1

0

Windowsは.dllをいくつかの場所で検索しています。これらはすべて、別の場所からの共有ライブラリではひどいものです(複数のアプリケーションが

https://msdn.microsoft.com/en-us/library/7d83bc18(v=vs.140).aspxからの引用:それらの独自のコピー/バージョン)をインストールし、両方の暗黙的および明示的なリンクで

を、そのようKernel32.dllのとUser32.dllのような「既知のDLL」、Windowsのための最初の検索します。 Windowsは、次のシーケンスでDLLを検索します。

  1. 現在のプロセスの実行可能モジュールがあるディレクトリ。

  2. 現在のディレクトリ。

  3. Windowsのシステムディレクトリ。 GetSystemDirectory関数は、このディレクトリのパスを取得します。

  4. Windowsディレクトリ。 GetWindowsDirectory関数は、このディレクトリのパスを取得します。

  5. PATH環境変数にリストされているディレクトリ。

あなたは行う唯一の賢明なことですが1をやっていました。

システム上のあなたのユーザは、5を使用してPATHを変更することもできます(しかし、デプロイ可能なパッケージを作成したい場合はこれは機能しません)。

2.、3.および4.はアプリケーション開発者にとって全く役に立たない。

+0

ありがとうございます。なぜ展開可能なパッケージでは動作しないのですか? – andseg

+0

アプリケーションをインストールするときに、ユーザーのPATHを変更したくないためです。 *互換性のないmysql DLLを持つ*別の*アプリケーションもインストールされるとどうなりますか? – peppe

+0

もう一度、ありがとう。最初のケースでは – andseg

関連する問題