Visual Studio Express 2005 で完全に静的にリンクされた .exe を作成するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/37398

  •  09-06-2019
  •  | 
  •  

質問

私が現在推奨している C++ 環境は、無料で非常に優れた Microsoft Visual Studio 2005 Express エディションです。私は時々、リリース .exe ファイルを他の人に送り、満足のいく結果をもたらしました。しかし最近、嬉しい結果は私が望むさらなる幸運に基づいているという不穏な発見をしました。これらのプログラムの 1 つを古い (2001 年製、慎重に更新されていない) XP ボックスで実行しようとすると、厄介な「システムは x.exe を実行できません」 (または同様の) メッセージが表示されるだけでした。

グーグルで調べてみると、このツールセットでは、静的リンクを指定しても、実際には追加の .dll ファイル (msvcm80.dll など) に依存する単純な hello-world.exe が生成されることがわかりました。信じられないほど精巧なバージョン スキーム システム (マニフェスト ファイルはありますか?) により、正確に正しい .dll バージョンがなければ .exe を実行できません。私はこんなものは欲しくないし、必要もありません。最小公倍数の Win32 操作だけを実行し、古い win32 OS 上で実行できる、昔ながらの自己完結型 .exe が欲しいだけです。

既存のツールセットで私がやりたいことを実行できるかどうか知っている人はいますか?

ありがとう。

役に立ちましたか?

解決

C ランタイムの場合は、プロジェクト設定に移動し、C/C++ を選択してから「コード生成」を選択します。「ランタイム ライブラリ」設定を「マルチスレッド dll」ではなく「マルチスレッド」に変更します。

他のライブラリを使用している場合は、動的にリンクされた CRT を無視するようにリンカーに明示的に指示する必要がある場合があります。

他のヒント

Visual Studio 2010 での私の経験では、DLL を必要としないようにするには 2 つの変更が必要です。プロジェクトのプロパティ ページから (ソリューション エクスプローラー ウィンドウでプロジェクト名を右クリック):

  1. [構成プロパティ] --> [全般] で、[MFC の使用] フィールドを [静的ライブラリで MFC を使用する] に変更します。

  2. [構成プロパティ] --> [C/C++] --> [コード生成] で、[ランタイム ライブラリ] フィールドを [マルチスレッド (/MT)] に変更します。

なぜ両方が必要だったのかはわかりません。これを使用して、glut32.dll への依存関係を削除しました。

後で追加:構成にこれらの変更を加える場合は、「すべての構成」に変更する必要があります。これは、「プロパティ」ウィンドウの上部で選択できます。デバッグ構成のみに変更を加えた場合、その変更はリリース構成には適用されず、その逆も同様です。

私もこれと同じ依存関係の問題を経験しており、VS 8.0 DLL (リリースのみ) を含めることができることも知っています。デバッグではありません!---そしてプログラムもリリースする必要があります)。.exe が含まれる親フォルダー内の適切な名前のフォルダーにあります。

方法:XCopy を使用した展開 (MSDN)

また、同じ静的にリンクされた .exe 内に C++ と C コードを含める必要がある場合は、問題が確実に発生することに注意してください。リンカーの競合が発生するため、正しい libXXX.lib を無視して動的にリンク (DLL) することによってのみ解決できます。 。

最後に、Windows 2000 以降には正しい DLL がインストールされているため、別のツールセット (VC++ 6.0) を使用すると、物事は「正常に動作」します。

Jared の返答に関して言えば、Windows 2000 以降を使用しても、必ずしも当面の問題が解決するとは限りません。ロブの応答は機能しますが、Windows アップデートではそのように構築されたアプリケーションにパッチを適用できないため、この修正によりセキュリティ上の問題が発生する可能性があります。

Nick Guerrera 氏は別の投稿で、Visual C++ ランタイム再頒布可能パッケージをアプリケーションにパッケージ化することを提案しています。これはすぐにインストールされ、Visual Studio から独立しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top