ここ数週間、アプリケーションを適切にデプロイするのに苦労しており (これは趣味です)、他に何を試せばよいのかわかりません。
Applications -> Qt Quick 2 Application (Built-in Elements) を選択して、Qt Creator (2.6.1) で新しいプロジェクトを開始しました。QML を微調整して、背景を青、テキストを赤にしました。
main.qml
import QtQuick 2.0
Rectangle {
width: 360
height: 360
color: "blue" // Added!
Text {
text: qsTr("Hello World")
anchors.centerIn: parent
color: "red" // Added!
}
MouseArea {
anchors.fill: parent
onClicked: {
Qt.quit();
}
}
}
Qt 5.0.1 と x86 MSVC 2010 コンパイラを使用しています。リリース バージョンをビルドしたところ、QtCreator で問題なく動作しました。コンパイラの詳細が必要な場合は、投稿します。
デプロイするために、デスクトップに新しいフォルダーを作成し、H :\Qt\Qt5.0.1\5.0.1\msvc2010\qml* のすべてをRelease HelloWorld.exe 実行可能ファイルと共にコピーしましたHelloWorld/
。H:\Qt\Qt5.0.1\5.0.1\msvc2010\bin\*
H:\Qt\Qt5.0.1\5.0.1\msvc2010\plugins\*
やり過ぎ?はい。しかし、私は必死です。
Windows 7 64 ビットで HelloWorld/HelloWorld.exe を実行すると、アプリケーションは正常に動作します。しかし、この HelloWorld/ フォルダーを Windows XP 32 ビットを実行している仮想マシンにコピーすると、適切なサイズのウィンドウが表示されますが、何も表示されません (白、テキストなし)。ウィンドウの中央をクリックすると、ウィンドウが閉じます。
そのため、実行ファイルを Dependency Walker にロードしましたが、異常は見られませんでした (もちろん、IESHIMS.DLL と WER.DLL は欠落していました)。Start Profile を実行したところ、多数の赤いエラーが表示されました。
GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlsAlloc") は、アドレス 0x78ABBA3B の "MSVCR100.DLL" から呼び出され、NULL を返しました。エラー: 指定されたプロシージャが見つかりませんでした (127)。
GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlsGetValue") は、アドレス 0x78ABBA48 の "MSVCR100.DLL" から呼び出され、NULL を返しました。エラー: 指定されたプロシージャが見つかりませんでした (127)。
GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlsSetValue") は、アドレス 0x78ABBA55 の "MSVCR100.DLL" から呼び出され、NULL を返しました。エラー: 指定されたプロシージャが見つかりませんでした (127)。
GetProcAddress(0x7C800000 [KERNEL32.DLL], "FlsFree") は、アドレス 0x78ABBA62 の "MSVCR100.DLL" から呼び出され、NULL を返しました。エラー: 指定されたプロシージャが見つかりませんでした (127)。
LoadLibraryExW("C:\documents and settings\owner\desktop\helloworld\platforms\qminimald.pdb", 0x00000000, DONT_RESOLVE_DLL_REFERENCES) が NULL を返しました。エラー: %1 は有効な Win32 アプリケーションではありません (193)。
LoadLibraryExW("C:\documents and settings\owner\desktop\helloworld\platforms\qwindowsd.pdb", 0x00000000, DONT_RESOLVE_DLL_REFERENCES) が NULL を返しました。エラー: %1 は有効な Win32 アプリケーションではありません (193)。
GetProcAddress(0x7E410000 [USER32.DLL], "UpdateLayeredWindowIndirect") は、アドレス 0x013A8749 の "QWINDOWS.DLL" から呼び出され、NULL を返しました。エラー: 指定されたプロシージャが見つかりませんでした (127)。
GetProcAddress(0x7C9C0000 [SHELL32.DLL], "SHCreateItemFromParsingName") は、アドレス 0x013A8997 の "QWINDOWS.DLL" から呼び出され、NULL を返しました。エラー: 指定されたプロシージャが見つかりませんでした (127)。
GetProcAddress(0x7C9C0000 [SHELL32.DLL], "SHGetStockIconInfo") は、アドレス 0x013A89C9 の "QWINDOWS.DLL" から呼び出され、NULL を返しました。エラー: 指定されたプロシージャが見つかりませんでした (127)。
GetProcAddress(0x7C800000 [KERNEL32.DLL], "GetTickCount64") は、アドレス 0x670726A7 の "QT5CORE.DLL" から呼び出され、NULL を返しました。エラー: 指定されたプロシージャが見つかりませんでした (127)。
GetProcAddress(0x755C0000 [MSCTFIME.IME], "ImeGetImeMenuItems") は、アドレス 0x76397354 の "IMM32.DLL" から呼び出され、NULL を返しました。エラー: 指定されたプロシージャが見つかりませんでした (127)。
GetProcAddress(0x4FDD0000 [D3D9.DLL], "Direct3DCreate9Ex") は、アドレス 0x01487198 の "LIBEGL.DLL" から呼び出され、NULL を返しました。エラー: 指定されたプロシージャが見つかりませんでした (127)。
デバッグ バージョンも実行しようとしましたが、MSVC100 dll の 64 ビット バージョンしかないため、それらを XP マシンにコピーできません (再配布可能な 32 ビット バージョンしか実行できません)。問題を解決するために使用できる他のツールがわかりません。
何かばかげたことをしているに違いないことはわかっていますが、インターネット上で役立つものは何も見つかりません。Qt アプリケーションの開発に多くの時間を費やし、それをデプロイしようとして行き詰まってしまうのは、本当にイライラします。
このプログラムは、Windows 7 32 ビット仮想マシンで問題なく動作することに注意してください (MSVC2012 再頒布可能パッケージがインストールされた後)。
私が本当に実行したいアプリケーションは、Windows XP で非常に奇妙に動作します。最初に実行すると、ウィンドウのサイズが適切になり、いくつかのテキスト文字列が表示されます。ただし、Rectangle{} 要素は表示されません。コーヒーを淹れる間、アプリを数分間実行したままにしました。コンピューターに戻ると、テキスト カーソルのビートに合わせて、ウィンドウがランダムな図形とテキストで点滅していました。それは一体何ですか?基本的な数学関数が台無しになっているように見えたため、インターフェイスの一部が不適切なサイズと位置で表示されていました。マウス カーソルが 1 回点滅するだけで実際のインターフェイスが表示されることも確認できました (もちろん、マウス カーソルのビートに合わせてランダムな形状が表示されたり消えたりします)。
気まぐれに、アプリケーションを使用して (テキスト ボックスが存在することがわかっている場所をクリックする)、リストの 1 つに入力してみましたが、うまくいきました。グラフィックを除いて、アプリケーションは完全に正常に動作しています。Qt 5.0 が OpenGL 処理の一部を作り直したのは知っていますよね? これはバグでしょうか、それともインストールしていないライブラリでしょうか?