Visual C++で作成したアプリケーションを実行してもらうには、それの作成に用いたバージョンに適合したライブラリが必要となります。
ライブラリには32ビット向けのx86と64ビット向けのx64がありますが、これは実行環境ではなくアプリケーションに合わせます。つまり64ビットの環境でもアプリケーションが32ビット向けならば、x86のライブラリをインストールします。
この選択を誤ると「アプリケーションを正しく起動できませんでした (0xc000007b)。[OK] をクリックしてアプリケーションを閉じてください。(The application was unable to start correctly (0xc000007b). Click OK to close the application.)」としてエラーとなります。
使用するライブラリによっては、それぞれ下表のライブラリのファイルが必要となります。
アプリケーションが使用するライブラリ | ライブラリのファイル名 |
---|---|
CRT ライブラリ | msvcrtversion.dll |
CRT ライブラリ (Visual C++ ?以降) | msvcrversion.dll |
CRT ライブラリ (Visual C++ 2015以降) | vcruntimeversion.dll |
CRT ライブラリ (Visual C++ 2015以降のデバッグ用 | vcruntimeversiond.dll |
CRT ライブラリ (Visual C++ 2019以降) | vcruntimeversion_1.dll |
OpenMP ライブラリ | vcompversion.dll |
標準C++ ライブラリ | msvcpversion.dll |
MFC ライブラリ | mfcversion.dll |
MFC ライブラリ (Unicodeのサポートを必要とする) | mfcversionu.dll |
MFC ライブラリ (Windows Forms Controlsを使用する) | mfcmversion.dll |
MFC ライブラリ (Windows Forms Controlsを使用し、Unicodeのサポートを必要とする) | mfcmversionu.dll |
ファイル名のversionはVisual C++の内部バージョンに対応しており、次のように命名されています。
ランタイムはside-by-sideにより、複数のバージョンを同一のシステム内に混在できるようになっています。またアプリケーション側でも必要とするバージョンを指定できるため、最新バージョンだけではなく、アプリケーションで使用するバージョンが必要となります。C/C++ 分離アプリケーションおよび side-by-side アセンブリのビルド | MSDN
インストール済みのライブラリのファイルは、%WINDIR%\System32にあります。また64bit環境での32bit向けのそれは、%WINDIR%\SysWOW64にあります。
配置方法 | 配置場所 | 適用方法 |
---|---|---|
集中配置 (Central Deployment) | %windir%\system32フォルダ | 再頒布可能パッケージまたは再頒布可能マージ モジュールによってインストール |
ローカル配置 (Local Deployment) | 実行可能ファイルのフォルダ | 実行可能ファイルのフォルダへ、ファイルをコピー |
静的リンク (Static Linking) | 実行可能ファイルの内部 | /MTオプションを指定してコンパイル |
集中配置用のパッケージはVisual Studioのインストーラに含まれ、既定では%PROGRAMFILES(X86)%\Microsoft Visual Studio version\VC\redistに、
の名前であります。それ以外は下表の場所より入手できます。
開発環境 | 入手先 | バージョン |
---|---|---|
Visual C++ 2005 | ||
Visual C++ 2008 | ||
Visual C++ 2010 | ||
Visual Studio 2012 | Visual Studio 2012 Update 4のVisual C++ | 11.0.61030 |
Visual Studio 2013 | Visual Studio 2013のVisual C++ | 12.0.30501 |
Visual Studio 2015 | Visual Studio 2015のVisual C++ | 14.0.23026 |
Microsoft Visual C++ 2015 Update 3 | 14.0.24212 | |
%PROGRAMFILES(X86)%\Microsoft Visual Studio version\VC\redist以下にあるファイルは、デバッグ用の一部のファイルを除いて再配布可能です。
よって、これらを実行可能ファイルと一緒にコピーして配布できます。
windows - Can I bundle the Visual Studio 2015 C++ Redistributable DLL's with my application? - Stack Overflow管理者権限がなくてもインストールできる利点がありますが、ライブラリの更新にはアプリケーションの再コンパイルが必要となるため、セキュリティ面から推奨されません。
使用するVisual C++のバージョンによって、対象とできるプラットフォームに制約があります。
対応するプラットフォームであっても、それのコンパイルに使用したバージョンに適合したランタイムがインストールされていなければ実行できません。たとえばVisual C++ 2015でコンパイルしたアプリケーションをWindows XPで実行してもらうには、そのWindows XPにVisual Studio 2015の再頒布可能パッケージをインストールしてもらいます。VS2015 and WinXP? - Doom9's Forum
「コンピューターに MSVCR**.dll がないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてみてください。」
メッセージにあるMSVCR**.dllをインストールします。
「ファイルまたはアセンブリ 'sample.dll'、またはその依存関係の 1 つが読み込めませんでした。指定されたモジュールが見つかりません。」
Visual C++で作成したDLLをC#などから呼び出した場合、エラー内容から不足しているランタイムを特定できないことがあります。その場合にはVisual Studioのインストール フォルダのVC\binにあるdumpbinを利用することで、依存しているファイル名を確認できます。windows - How to check for DLL dependency? - Stack Overflow
C:\Program Files (x86)\Microsoft Visual Studio *.*\VC\bin> dumpbin /dependents sample.dll Microsoft (R) COFF/PE Dumper Version ** Copyright (C) Microsoft Corporation. All rights reserved. Dump of file sample.dll File Type: DLL Image has the following dependencies: KERNEL32.dll VCRUNTIME140.dll MSVCP140.dll mscoree.dll
「ファイルまたはアセンブリ 'sample.dll'、またはその依存関係の 1 つが読み込めませんでした。** は有効な Win32 アプリケーションではありません。 (HRESULT からの例外:0x800700C1)」
64bitアプリケーションで32bit向けのDLLを、またはその逆を読み込ませようとしています。
「このアプリケーションのサイド バイ サイド構成が正しくないため、アプリケーションを開始できませんでした。詳細については、アプリケーションのイベント ログを参照するか、コマンド ライン ツール sxstrace.exe を使用してください。」
イベント ビューアーでソースが「SideBySide」のエラーを確認し、その説明にあるMicrosoft.VC**の内部バージョンに対応した再頒布可能パッケージをインストールします。
エラーの通知はなく、イベント ビューアーで
と記録されるときは、ライブラリの不足が原因であることがあります。