- ベストアンサー
VC++で静的リンクしたアプリを作りたい
- 【質問】MicrosoftのVisual Studio 2012を使用して、VC++2012で静的リンクしたアプリケーションを作成したい。しかし、静的リンクの設定方法が分からない。.Net Frameworkがない環境でも動作するアプリケーションを作成したい。
- 【経緯】現在、MSDNの技術資料「Deployment in Visual C++」のLocal Deployment方法に記載されているDLLファイルのコピーを行って実現しているが、MicrosoftからはLocal Deploymentの使用を禁止すると言われている。そのため、静的リンクしたVC++2012アプリケーションを作成する必要がある。
- 【要望】具体的な方法が分からないため、Visual Studio 2012でプロジェクトを定義する際に「静的リンクアプリケーション」を指定する方法を教えて欲しい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>(1)静的リンク=マルチスレッド の発想ができません。キーワードを指定してのヘルプ検索のヒントをご教示ください。 VCの以前からの流儀…ですからねぇ…。 「VC 静的リンク」で検索するとランタイムライブラリの設定を変更する。と紹介されているページが見つかるでしょう。 で、設定を変更する際のメニューなどの操作手順を解説しているページも見つかるかと。 ネット上に情報はあるのですから、そのように「調べる手順」は身につけておいた方がいいかと。 >(2)「上級者用の設定」の文言も気がかりです。見つけ方を教えてください。 VS2010の頃はあったのですが、VS2012でも存在するのかどうかは不明です。 MicrosoftのサイトだとVS2012 ExpressEditionにはあるかのような記述がありましたが、 手元の「VS Express for Desktop」には無いんですよねぇ…。 # http://msdn.microsoft.com/ja-jp/library/vstudio/038tzxdw.aspx の # 「1.[デバッグ] メニューの [例外] をクリックします」にあるメモに。 >(3)良い参考書があればご教示ください。 人によって変わるでしょうから本屋で立ち読みしながら探して下さい。としか言えないですね。 ただし、今回の場合はMFC(ExpressEditionにはない)ならともかく.NET Frameworkは使えませんので、少々古いバージョン辺りの本になるかも知れません。 .NET Frameworkメインで記述されている本では今回の目的には沿わないでしょう。 # Win32APIプログラミングとかそういうのでしょうかね…。 私の環境にはVS Express for Desktopはインストールしてありますが… もっぱら使っているのはVS2010 ExpressEdition(C++かC#)です。 MFCが必要とかの場合は製品版を所持しているVS2005になってしまいますが。 そんなワケで2012はほとんど使っていません。 # メイン環境もまだWindows7ですし。(仕事中はXPですからVS2012も動きませんしね)
その他の回答 (2)
- Wr5
- ベストアンサー率53% (2173/4061)
>どこでどのように設定すればよいのか教えてください。 ですから、既に回答あるようにプロジェクトのプロパティでランタイムライブラリの項目を「マルチスレッド(/MT)」に変更するだけです。 キーワードで検索すれば見つかるネタですし、前回の質問で「VC++2010Expressで静的リンク」として掲示されているリンク先の質問でも変更のしかたを質問者が書いていますよ。 # バージョンは違えどこの辺りの設定は以前からほとんど変わっていません。 注意点としては構成でReleaseを選択しておくこと…くらいですかね。 「上級者用の設定」に変更しないと表示されないメニュー項目もあるかも知れませんが…。
補足
Wr5さん、再度の回答ありがとうございます。 『ですから、・・・~に変更するだけです』と言われても、どうすれば良いのか戸惑うばかりでした。 『バージョンは違えど・・・以前からほとんど変わっていません』のアドバイスも2012しかないので、猫に小判です。 「上級者用の設定」の文言も他の回答者から教わり、探したのですが、見つかりません。 「静的リンク」キーワードもヘルプで探せませんでした。 Wr5さん、VC++2012を初めて使います。VS2012をインストールし、Wr5さんが前回の回答に記載されていたのとほぼ同じコードを試したのが先月です。今回の回答を戴き、一生懸命探し、次のようにプロパティを変更しました。 プロジェクトのプロパティ → 構成プロパティ → C/C++ → ランタイム ライブラリ → マルチスレッド (/MT) Release構成で、完成したEXEサイズは152KB、やっと目的を達成しました。 私にはWr5さんと対等にディスカッションできる能力がありません。VC++初心者が理解できるレベルでの教えを心からお願いします。 VC2012++を使うにあたり、一夜漬け勉強をしたのですが全く間に合っていません。 今回戴いた回答で、とりあえずの目的は達成できたのですが、次の項目についてアドバイスを戴きたくお願いします。 (1) 静的リンク=マルチスレッド の発想ができません。キーワードを指定してのヘルプ検索のヒントをご教示ください。 (2) 「上級者用の設定」の文言も気がかりです。見つけ方を教えてください。 (3) 良い参考書があればご教示ください。
- Wr5
- ベストアンサー率53% (2173/4061)
>言い換えると .Net FrameWork がない環境でも動くアプリケーション .Net Framework使っていたら無理じゃないですかねぇ。 >neKo_deuxさんご指摘の通り、C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\redist\x86\Microsoft.VC110.CRT\ フォルダーから msvcp110.dll と msvcr110.dll をVC++アプリケーションを運搬する USB メモリーなどにコピーするだけで、解決します。 ってだけなら、既に回答先に示されている「マルチスレッド(/MT)」で可能かと。 まぁこの場合作れるアプリケーションはC/C++でWin32APIを使用したものになりますが。 # .Net Framework使ってないもの。ということになります。 ちなみに… #include <iostream> using namespace std; int main() { cout << "Hello, World!" << endl; return 0; } こんな程度のコードが12KBから153KBになります。
補足
Wr5さん、回答ありがとうございます。Wr5さんの回答文の最後の行 「こんな程度のコードが12KBから153KBになります。」 は、静的リンクで必要なモジュールをすべてリンクするので当然です。何も問題ありません。 私が知りたいのは、Visual Studio 2012 で、この153KBの実行可能なモジュールを作る方法です。 どこでどのように設定すればよいのか教えてください。
お礼
Wr5さん、戴いた回答に感謝して私の質問をクローズさせていただきます。 『VCの以前からの流儀…ですからねぇ…。』と言える Wr5さんをうらやましく思えます。 ありがとうございました。