1

Qt、ITK、VTKを使用して、Windows 7でmingw32を使用して構築したソフトウェアをコンパイルしようとしています。これは多くのコンピューターで正常に実行されましたが、ラップトップで問題が発生しています。

このマシンにQtを最初にインストールしたときに、「msvc2010」またはQtのビジュアルスタジオバージョンをインストールしたという点で間違いを犯しました。VSをインストールしましたが、これがデフォルトであり、変更しませんでした。私の間違いに気づき、私はこのQtのすべての痕跡をアンインストールし、Mingw32バージョンをインストールしました。私がダウンロードした正確なバージョンは次のとおりです。Windows用のQtライブラリ4.8.3(minGW 4.4、317 MB)

私はmingw32をインストールし、qtをインストールしましたが、すべて素晴らしくてダンディで、今はソフトウェアをコンパイルしています。美しく構築されますが、リンク段階で次の厄介なエラーが発生します。

mingw32-make[2]: *** No rule to make target 'C:/QtSDK/Desktop/Qt/4.8.1/msvc2010/
lib/QtOpenGL4.dll', needed by 'x.exe'.  Stop.
CMakeFiles\Makefile2:62: recipe for target 'CMakeFiles/x.dir/all' failed
mingw32-make[1]: *** [CMakeFiles/x.dir/all] Error 2
Makefile:74: recipe for target 'all' failed
mingw32-make: *** [all] Error 2

ここで、xは私のプロジェクトの名前です。

makeターゲットに注意してください:C:/QtSDK/Desktop/Qt/4.8.1/msvc2010/lib/QtOpenGL4.dll。これは、DLLを探すための正しい場所ではありません。Qtの最初のインストールのlibの場所を見ています。QtSDKフォルダーはもう存在しません。新しいバージョンは別のフォルダーの下にあります。

これは悲しいことに、cmakeによってビルドフォルダーに生成されるCMakeFilesの下のlink.txtにも反映されています。エントリの1つは、C:\ QtSDK \ Desktop \ Qt \ 4.8.1 \ msvc2010 \ lib\QtGui4.dllと他の多くのDLLです。

明らかに、問題は、Cmakeが以前のバージョンのQtのターゲットを生成していることです。

これが発生しているばかげたキャッシュを消去して、これを行わないようにするにはどうすればよいですか? 私はCmakeを再インストールし、Qtを再インストールし、考えられるすべてのことを実行しました。Cmake変数がすべて正しいQtフォルダーを指していることを確認しました(もう1つは存在しないため、正しくない場合はリンク段階に到達できません)。

どうもありがとう。

編集:

私はこの非常に適切な警告を受け取ります、それはそれに惨めなファイルパスを持っています:

CMake Warning (dev) at CMakeLists.txt:22 (ADD_EXECUTABLE):
 Policy CMP0003 should be set before this line.  Add code such as

if(COMMAND cmake_policy)
  cmake_policy(SET CMP0003 NEW)
   endif(COMMAND cmake_policy)

 as early as possible but after the most recent call to
 cmake_minimum_required or cmake_policy(VERSION).  This warning appears
 because target "x" links to some libraries for which the linker must
 search:

comctl32, vfw32, ws2_32, wsock32, -lgdi32, opengl32

 and other libraries with known full path:

C:/Qt/4.8.3/lib/libQtGui4.a
C:/ITK/lib/libitksys-4.1.dll.a
C:/VTK/bin/libQVTK.a
C:/QtSDK/Desktop/Qt/4.8.1/msvc2010/lib/QtOpenGL4.dll

 CMake is adding directories in the second list to the linker search path in
 case they are needed to find libraries from the first list (for backwards
 compatibility with CMake 2.4).  Set policy CMP0003 to OLD or NEW to enable
 or disable this behavior explicitly.  Run "cmake --help-policy CMP0003" for
 more information.
 This warning is for project developers.  Use -Wno-dev to suppress it.

「NEW」ポリシーを追加したところ、警告は消えましたが、それでも同じ問題が発生します。

4

3 に答える 3

1

問題は、古いQt(VS2010用に構成されている)をインストールしているときにVTKをインストールしたことであることが判明しました。VTKのライブラリを含めると、QtのDLLも含まれていましたが、それでも古いQtを指しています。

VTKを再インストールしたところ、このステップを通過しました。

于 2012-11-11T21:38:36.797 に答える
0

cmakeファイルを再生成してみてください:

mingw32-make clean
cmake .
于 2012-11-11T19:05:30.843 に答える
0

CMakeCache.txt短いバージョン:ビルドディレクトリ内のファイルを削除する必要があります。

長いバージョン:CMakeが外部ライブラリ/プログラムなどを検索するときはいつでも(たとえばFIND_LIBRARY、Qtを検索するときに呼び出されます)、結果をキャッシュに保存します。以降の実行では、ライブラリを再度検索する代わりに、キャッシュされた値(存在する場合)を使用するだけです。したがって、CMakeが実際にライブラリを再度検索できるように、これらのキャッシュエントリを削除する必要があります。を削除しCMakeCache.txtて最初からやり直すだけです。両方のバージョンが並行してインストールされている場合は、CMakeが関連するライブラリの検索に依存しているため、QTDIR環境変数が正しく設定され、パスにが含まれていることを確認してください。<QTDIR>/binqmake

注:キャッシュ全体を削除したくない場合は、Qt関連の変数も削除する必要があります。

cmake -U *QT_* .

トリックを行う必要があります。

ただし、キャッシュ全体を削除するのが最もクリーンなソリューションです。

于 2012-11-13T10:51:48.277 に答える