Visual C++ ランタイム ライブラリ

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
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
Determining Which DLLs to Redistribute | MSDN

ファイル名のversionはVisual C++の内部バージョンに対応しており、次のように命名されています。

  •  Visual C++ .NET 2003 (内部バージョン:7.1) … msvcr71.dll
  •  Visual C++ 2010 (内部バージョン:10.0) … msvcr100.dll

複数バージョンの混在

ランタイムは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 C++ での配置 | MSDN

再頒布可能パッケージによる集中配置

集中配置用のパッケージはVisual Studioのインストーラに含まれ、既定では%PROGRAMFILES(X86)%\Microsoft Visual Studio version\VC\redistに、

  • vcredist_arm.exe
  • vcredist_x86.exe
  • vcredist_x64.exe

の名前であります。それ以外は下表の場所より入手できます。

開発環境 入手先 バージョン
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
再配布する DLL の決定 | MSDN

ローカル配置 (Local Deployment)

%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

静的リンク (Static Linking)

管理者権限がなくてもインストールできる利点がありますが、ライブラリの更新にはアプリケーションの再コンパイルが必要となるため、セキュリティ面から推奨されません。

対応プラットフォームの制約

使用するVisual C++のバージョンによって、対象とできるプラットフォームに制約があります。

ユーザー ターゲットおよびプロパティ - MSBuild (Visual C++) の概要 | MSDN チュートリアル: MSBuild を使用した Visual C++ プロジェクトの作成 | MSDN

対応するプラットフォームであっても、それのコンパイルに使用したバージョンに適合したランタイムがインストールされていなければ実行できません。たとえばVisual C++ 2015でコンパイルしたアプリケーションをWindows XPで実行してもらうには、そのWindows XPにVisual Studio 2015の再頒布可能パッケージをインストールしてもらいます。VS2015 and WinXP? - Doom9's Forum

トラブル対処法

MSVCRがない

コンピューターに 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

有効なWin32アプリケーションではない

ファイルまたはアセンブリ 'sample.dll'、またはその依存関係の 1 つが読み込めませんでした。** は有効な Win32 アプリケーションではありません。 (HRESULT からの例外:0x800700C1)

64bitアプリケーションで32bit向けのDLLを、またはその逆を読み込ませようとしています。

サイド バイ サイド構成が正しくない

このアプリケーションのサイド バイ サイド構成が正しくないため、アプリケーションを開始できませんでした。詳細については、アプリケーションのイベント ログを参照するか、コマンド ライン ツール sxstrace.exe を使用してください。

イベント ビューアーでソースが「SideBySide」のエラーを確認し、その説明にあるMicrosoft.VC**の内部バージョンに対応した再頒布可能パッケージをインストールします。

例外コード: 0xe0434352

エラーの通知はなく、イベント ビューアーで

  • 障害が発生しているモジュール名: KERNELBASE.dll
  • 例外コード: 0xe0434352

と記録されるときは、ライブラリの不足が原因であることがあります。

Microsoft Learnから検索