6

最近、Windows デスクトップ用の Visual Studio Express 2010 から Visual Studio 2012 Express にアップグレードしました。以前に Windows XP を対象とした互換性が欠如していたことは認識していますが、これは Update 1 (私がインストールしたもの) によって解決されたと思いました。

ただし、2012 Express を使用してコンパイルした C++ アプリケーションで Win XP をターゲットにするのは依然として困難です。プラットフォーム ツールセットを「Visual Studio 2012 - Windows XP (v110_xp)」に設定しましたが、違いはありません。コンパイルしたアプリケーションを Windows XP システム (VirtualBox 経由で Wi​​ndows XP を実行) で実行しようとすると、アプリケーションが「有効な Win32 アプリケーションではありません」というエラーが表示されます。

また、CLR サポートを「共通言語ランタイム サポートなし」に設定し、ランタイム ライブラリを「マルチスレッド (/MT)」に設定しようとしました。

次のコードを使用した非常に基本的な空の C++ プロジェクトでも、XP で実行することはできません。

#define _WIN32_WINNT 0x0501
#define WINVER 0x0501
#define NTDDI_VERSION 0x0501

#include <iostream>

int main()
{
    std::cout << "TEST" << std::endl;

    std::cout << std::endl << std::endl << "Press ENTER to close this window.";
    std::cin.get();
    return 0;
}

コンパイラ/プロジェクト設定のどこが間違っているのか誰か教えてもらえますか?

Ps MS VC++ 2010 および 2012 再頒布可能パッケージを XP 仮想マシンにインストールしました。Visual Studio Express 2010 でコンパイルしたアプリケーションは、XP 仮想マシンで正常に動作します。

4

4 に答える 4

1

これは機能します:

構成プロパティ -> リンカー -> システム -> サブシステム = /SUBSYSTEM:WINDOWS

構成プロパティ -> 一般 -> プラットフォーム ツール セット -> サブシステムVisual Studio 2012 - Windows XP (v110_xp)

Visual Studio 2012 Express Update 3 を使用します。

于 2013-06-27T19:29:17.843 に答える
1

mingw で再配布された GNU GCC ツール チェーンを使用します。MSVS は実際には依存関係を最小限に抑えるだけですが、それらの一部は依然として exe に残ります。gcc でコンパイルするだけで、完全な静的リンクがサポートされ、exe サイズが小さく、互換性が安定しています。

于 2013-10-31T22:35:00.687 に答える
1

プロジェクトの「構成プロパティ->リンカー->システム->サブシステム」プロパティを確認してください。空白の場合は、または
で埋めます。(/SUBSYSTEM:CONSOLE)(/SUBSYSTEM:WINDOWS)

于 2013-03-25T08:28:17.627 に答える
0

このメッセージは、ビルドが 32 ビット アプリケーションを生成していないことを示しています。たとえば、バージョンに依存する API の場合、シンボルが見つからないことを示す別のエラーが表示されます。構成マネージャーで正しいターゲット プラットフォームを使用していることを示したので、プロパティ エクスプローラーをチェックして、競合する引数や既定値がないことを確認してください。オプション /MACHINE:X64 のリンクが表示された場合は、問題が見つかりました。

それでもうまくいかない場合は、Sysinternals プロセス エクスプローラーを実行して、実際にどの cl/link がどの引数で起動されているかを確認してみてください。それが役立つことを願っています。

于 2013-01-29T17:28:50.703 に答える