2015-05-01

QtとVisual Studio 2012で作ったアプリをXPで動かす

Visual Studio 2012 と XP

Visual Studio 2012 を使って、 Windows XP で動作させるアプリを開発するのは、可能ですがちょっとした設定が必要です。単純にビルドしてできたexeファイルをXPで実行しようとすると、エラーになります。

有効な Win32 アプリケーションではありません

Visual Studio 2012 の開発環境でXP用アプリを開発するには、Visual Studio 2012 Update 1以上(本稿執筆時点での最新版は Update 4)をインストールし、プロジェクトのプロパティで、プラットフォームツールセットの「v110_xp」と書かれたものを選択する必要があります。

Visual Studio 2012 - Windows XP (v110_xp)

この設定でビルドしたexeファイルなら、XPで実行することができます。

Visual Studio ならこれでいいのですが、Qt SDK / Qt Creatorで開発したアプリをXPで実行させるため、上記のような設定をQtプロジェクトで行う方法を紹介します。

Qtプロジェクト

最も重要な点は、リンカに次のようなオプションを指定することです。

/SUBSYSTEM:"WINDOWS,5.01"

上記は、32ビットアプリの場合で、64ビット版Qt SDKを使用した、64ビットアプリの場合は、バージョン番号は、5.02を指定します。

実際のプロジェクトファイルは、以下のようになります。

#-------------------------------------------------
#
# Project created by QtCreator 2015-01-15T13:06:36
#
#-------------------------------------------------

QT       += core gui widgets

TARGET = QtTest
TEMPLATE = app

SOURCES += main.cpp\
        MainWindow.cpp

HEADERS  += MainWindow.h

FORMS    += MainWindow.ui

QMAKE_LFLAGS_WINDOWS-=/SUBSYSTEM:WINDOWS
QMAKE_LFLAGS_WINDOWS+=/SUBSYSTEM:"WINDOWS,5.01"

最後の2行で、リンカに渡すオプションから「/SUBSYSTEM:WINDOWS」を取り除いて、「/SUBSYSTEM:"WINDOWS,5.01" 」に変更しています。(64ビットアプリの場合は、5.01ではなくて5.02とします。)

(2015-05-01補足)

上で紹介した方法は有効ですが、別の書き方で同じ事が実現できることが分かりました。ちょっとした違いですが、よりシンプルに記述できます。QMAKE_LFLAGS_WINDOWSの値を書き換えるのではなく、QMAKE_SUBSYSTEM_SUFFIXの値を設定します。

QMAKE_LFLAGS_WINDOWS-=/SUBSYSTEM:WINDOWS
QMAKE_LFLAGS_WINDOWS+=/SUBSYSTEM:"WINDOWS,5.01"

↑これは不要になります。

win32:QMAKE_SUBSYSTEM_SUFFIX=,5.01

↑代わりにこれを追加します。

「=」の直後の「,」を忘れないようにします。リンカに渡る /SUBSYSTEM の値は同じなので、結局やっていることは変わりありません。

フォルダ構成

実行に最低限必要なファイルは、概ね以下のようになります。文字コーデック、画像、印刷、データベースなどを使用する際は、さらに、Qt SDKに含まれるDLLが必要となる場合があります。

サンプル

QtTest.zip