読者です 読者をやめる 読者になる 読者になる

小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


Visual StudioでMSVCR90.dllに依存しないDLLやEXEを作成する

Visual Studio

f:id:replication:20140820005540j:plain
photo credit: epSos.de via photopin cc

はじめに

Visual Studioでexeやdllを作成すると、自動的にMSVCR80.dllやMSVCR90.dllといったランタイムライブラリをリンクしてしまいます。
ランタイムライブラリが存在しない環境だと作ったexeやdllが動かないので、ランタイムライブラリに依存しないようにする方法をまとめました。

ランタイムライブラリに依存しているかを調べる

作成したexeやdllがランタイムライブラリに依存しているかを調べるには、dumpbin.exeを使います。
dumpbin.exeは、以下のディレクトリにあると思います。

C:\Program Files\Microsoft Visual Studio 9.0\VC\bin

使い方は、/importsオプションを指定して、exeやdllのファイル名を指定します

dumpbin.exe /imports sampleApp1.exe

dumpbinコマンドを実行した結果、以下のようにMSVCR80.dllやMSVCR90.dllがリンクされていると、依存しているということになります。
f:id:replication:20140412183306p:plain

MSVCR90.dllに依存しないようにする

ランタイムライブラリに依存しないようにするには、以下の記事が参考になります。

MSVCR80.dll/MSVCR90.dllに依存しないようにする方法 - ラブナガ!MSVCR80.dll/MSVCR90.dllに依存しないようにする方法 - ラブナガ!

プロジェクトのプロパティを開き、C/C++→コード生成→ランタイムライブラリを「マルチスレッド (/MT)」または「マルチスレッド デバッグ (/MTd)」に変更します。
f:id:replication:20140412184236p:plain

リビルド後に、再度dumpbinコマンドで確認すると、MSVCR80.dllやMSVCR90.dllといったランタイムライブラリが表示されなることを確認してください。