「プロパティ」「コード生成」の「ランタイムライブラリ」の"マルチスレッド(/MT)"などの設定についてなのですが
"マルチスレッド DLL(/MD)" だと他の環境で動かないとか色々と問題があると聞いたのですが具体的にはどんな問題があるのでしょう?
逆に"マルチスレッド DLL(/MD)"にしないといけない場合ってどんな場合なのでしょう?
まだ始めたばかりなのでよろしくお願いします
プロジェクトプロパティのマルチスレッドについて
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: プロジェクトプロパティのマルチスレッドについて
/MTだとstaticリンクされるのでWindowsUpdateの恩恵は受けれないですがランタイムライブラリのインストールの心配はなくなります。
/MDだとランタイムライブラリがインストールされていないと動きませんが、ランタイムライブラリの致命的バグの時にWindowsUpdateで更新されるので開発側の手間はなくなります。
あとDLLはメモリを共有するので/MDを選べばメモリ消費も減り、実行ファイルがコンパクトになるメリットもあります。
【補足】
ランタイムライブラリは、「Visual C++ 再頒布可能パッケージ」 としてマイクロソフトから提供されています。
開発環境毎に違うので注意して下さい。
「ダウンロード詳細 Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ (x86)」
http://www.microsoft.com/downloads/ja-j ... 28b8578f03
「ダウンロード詳細 Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ (x86)」
http://www.microsoft.com/downloads/ja-j ... 02B2AF5FC2
「ダウンロード詳細 Microsoft Visual C++ 2005 SP1 再頒布可能パッケージ (x86)」
http://www.microsoft.com/downloads/ja-j ... 9C36F85647
/MDだとランタイムライブラリがインストールされていないと動きませんが、ランタイムライブラリの致命的バグの時にWindowsUpdateで更新されるので開発側の手間はなくなります。
あとDLLはメモリを共有するので/MDを選べばメモリ消費も減り、実行ファイルがコンパクトになるメリットもあります。
【補足】
ランタイムライブラリは、「Visual C++ 再頒布可能パッケージ」 としてマイクロソフトから提供されています。
開発環境毎に違うので注意して下さい。
「ダウンロード詳細 Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ (x86)」
http://www.microsoft.com/downloads/ja-j ... 28b8578f03
「ダウンロード詳細 Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ (x86)」
http://www.microsoft.com/downloads/ja-j ... 02B2AF5FC2
「ダウンロード詳細 Microsoft Visual C++ 2005 SP1 再頒布可能パッケージ (x86)」
http://www.microsoft.com/downloads/ja-j ... 9C36F85647
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: プロジェクトプロパティのマルチスレッドについて
「マルチスレッド(/MT)」になっている場合はスタティックライブラリの「libcmt.lib」が使われます。
「マルチスレッドDLL(/MD)」になっている場合は スタティックライブラリの「msvcrtd.lib」が使われます。
DXライブラリはReleaseモードでビルドしている場合は「マルチスレッドDLL(/MD)」にすると「LINK : warning LNK4098: defaultlib 'libcmt' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。」という警告が出力されるので設定さえ間違わなければOKです。
「マルチスレッドDLL(/MD)」になっている場合は スタティックライブラリの「msvcrtd.lib」が使われます。
DXライブラリはReleaseモードでビルドしている場合は「マルチスレッドDLL(/MD)」にすると「LINK : warning LNK4098: defaultlib 'libcmt' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。」という警告が出力されるので設定さえ間違わなければOKです。
Re: プロジェクトプロパティのマルチスレッドについて
なるほどー
自分の環境だとVisualStudioがあるからどっちでも問題ないんですね
先に進むとnaohiro19さんのお話のような場合も出てくるのですね。まだ私には分からないですケド。
自動的にアップデートされてサイズも小さいのも魅力ですね
でもランタイムライブラリもVisualStudioもインストールされていない環境だと実行できないんですね。
自分の環境で、他の人がどうなって動かないのかとかホントに紹介したランタイムライブラリで動くようになるのかとか
確認できないとキモチワルイです。
VisualStudioをアンインストールする以外に簡単に確認する方法とかないでしょうか
よろしくお願いしますm(_ _)m
自分の環境だとVisualStudioがあるからどっちでも問題ないんですね
先に進むとnaohiro19さんのお話のような場合も出てくるのですね。まだ私には分からないですケド。
自動的にアップデートされてサイズも小さいのも魅力ですね
でもランタイムライブラリもVisualStudioもインストールされていない環境だと実行できないんですね。
自分の環境で、他の人がどうなって動かないのかとかホントに紹介したランタイムライブラリで動くようになるのかとか
確認できないとキモチワルイです。
VisualStudioをアンインストールする以外に簡単に確認する方法とかないでしょうか
よろしくお願いしますm(_ _)m
マルチバイトを忘れずに
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: プロジェクトプロパティのマルチスレッドについて
とりあえずは動的にDLLを読みこんでみるプログラムを作ってみるって手は思いつきますがチェックツールがあったかは調べておきます。
【補足】
「VC のランタイムチェック」
http://www7a.biglobe.ne.jp/~kasachan/VCrt_Check.html
このツールで確認できます。
あるいは、コントロールパネルの「プログラムと機能(OSバージョンで名前が違う可能性アリ)」でインストール済みかは確認できます。
【補足ついで】
参考としてVMwarePlayer(無料の仮想PC)等でピュアなインストールしたばかりOSの状況を作り、その上でテストする方法をご紹介します。
こういうOSの体験版を利用します。
「Windows 7 Enterprise 評価版 ダウンロード」
http://technet.microsoft.com/ja-jp/eval ... 42495.aspx
Win8ですがWin7でも同じです。Win8を入れてもよいでしょう。
「VMware Playerに「Windows 8 Consumer Preview」をインストールしよう! - 裏技shop DD」
http://shopdd.blog51.fc2.com/blog-entry-1034.html
【補足】
「VC のランタイムチェック」
http://www7a.biglobe.ne.jp/~kasachan/VCrt_Check.html
このツールで確認できます。
あるいは、コントロールパネルの「プログラムと機能(OSバージョンで名前が違う可能性アリ)」でインストール済みかは確認できます。
【補足ついで】
参考としてVMwarePlayer(無料の仮想PC)等でピュアなインストールしたばかりOSの状況を作り、その上でテストする方法をご紹介します。
こういうOSの体験版を利用します。
「Windows 7 Enterprise 評価版 ダウンロード」
http://technet.microsoft.com/ja-jp/eval ... 42495.aspx
Win8ですがWin7でも同じです。Win8を入れてもよいでしょう。
「VMware Playerに「Windows 8 Consumer Preview」をインストールしよう! - 裏技shop DD」
http://shopdd.blog51.fc2.com/blog-entry-1034.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。