dポイントプレゼントキャンペーン実施中!

Microsoft のVisual Studio 2012 を使用しています。VC++2012 を使用して静的リンクしたアプリケーションを作りたいのですが、静的リンクを行う設定方法がわかりません。言い換えると .Net FrameWork がない環境でも動くアプリケーションを作りたいのです。
詳細は、MSN 相談箱 QNo.8057365(投稿日時 - 2013-04-24 12:53:43)を参照ください。
現在は、次のMSDNの技術資料「Deployment in Visual C++」
http://msdn.microsoft.com/ja-jp/library/dd293574 …
に記載されている2番目の方法Local Deployment(ローカル配置)に記載されている必要な DLL ファイルをコピーする方法で実現していますが、Microsoft に相談したところ、次のように言われています。

『VC++ 2012 のLocal Deployment を使ってアプリケーション プログラムの開発を行うのは良いが、一旦開発が成功した後はLocal Deployment の使用を禁止する。』

以上の経緯から、静的リンクした VC++ 2012 アプリケーション プログラムを作る必要があります。具体的な形態は、Windows PE 3 で起動したPC でVC++ 2012 で開発したアプリケーション プログラムを動かします。
Visual Studio 2012 でプロジェクトを定義するとき、「静的リンク アプリケーション」指定の必要があると考えるのですが、その方法がわかりません。どうかご教示をお願いします。

A 回答 (3件)

>(1)静的リンク=マルチスレッド の発想ができません。

キーワードを指定してのヘルプ検索のヒントをご教示ください。

VCの以前からの流儀…ですからねぇ…。
「VC 静的リンク」で検索するとランタイムライブラリの設定を変更する。と紹介されているページが見つかるでしょう。
で、設定を変更する際のメニューなどの操作手順を解説しているページも見つかるかと。
ネット上に情報はあるのですから、そのように「調べる手順」は身につけておいた方がいいかと。

>(2)「上級者用の設定」の文言も気がかりです。見つけ方を教えてください。

VS2010の頃はあったのですが、VS2012でも存在するのかどうかは不明です。
MicrosoftのサイトだとVS2012 ExpressEditionにはあるかのような記述がありましたが、
手元の「VS Express for Desktop」には無いんですよねぇ…。
# http://msdn.microsoft.com/ja-jp/library/vstudio/ …
# 「1.[デバッグ] メニューの [例外] をクリックします」にあるメモに。

>(3)良い参考書があればご教示ください。

人によって変わるでしょうから本屋で立ち読みしながら探して下さい。としか言えないですね。
ただし、今回の場合はMFC(ExpressEditionにはない)ならともかく.NET Frameworkは使えませんので、少々古いバージョン辺りの本になるかも知れません。
.NET Frameworkメインで記述されている本では今回の目的には沿わないでしょう。
# Win32APIプログラミングとかそういうのでしょうかね…。

私の環境にはVS Express for Desktopはインストールしてありますが…
もっぱら使っているのはVS2010 ExpressEdition(C++かC#)です。
MFCが必要とかの場合は製品版を所持しているVS2005になってしまいますが。
そんなワケで2012はほとんど使っていません。
# メイン環境もまだWindows7ですし。(仕事中はXPですからVS2012も動きませんしね)
    • good
    • 0
この回答へのお礼

Wr5さん、戴いた回答に感謝して私の質問をクローズさせていただきます。
『VCの以前からの流儀…ですからねぇ…。』と言える Wr5さんをうらやましく思えます。
ありがとうございました。

お礼日時:2013/05/12 13:44

>どこでどのように設定すればよいのか教えてください。



ですから、既に回答あるようにプロジェクトのプロパティでランタイムライブラリの項目を「マルチスレッド(/MT)」に変更するだけです。
キーワードで検索すれば見つかるネタですし、前回の質問で「VC++2010Expressで静的リンク」として掲示されているリンク先の質問でも変更のしかたを質問者が書いていますよ。
# バージョンは違えどこの辺りの設定は以前からほとんど変わっていません。
注意点としては構成でReleaseを選択しておくこと…くらいですかね。

「上級者用の設定」に変更しないと表示されないメニュー項目もあるかも知れませんが…。

この回答への補足

Wr5さん、再度の回答ありがとうございます。
『ですから、・・・~に変更するだけです』と言われても、どうすれば良いのか戸惑うばかりでした。
『バージョンは違えど・・・以前からほとんど変わっていません』のアドバイスも2012しかないので、猫に小判です。
「上級者用の設定」の文言も他の回答者から教わり、探したのですが、見つかりません。
「静的リンク」キーワードもヘルプで探せませんでした。

Wr5さん、VC++2012を初めて使います。VS2012をインストールし、Wr5さんが前回の回答に記載されていたのとほぼ同じコードを試したのが先月です。今回の回答を戴き、一生懸命探し、次のようにプロパティを変更しました。

プロジェクトのプロパティ → 構成プロパティ → C/C++ → ランタイム ライブラリ → マルチスレッド (/MT)

Release構成で、完成したEXEサイズは152KB、やっと目的を達成しました。

私にはWr5さんと対等にディスカッションできる能力がありません。VC++初心者が理解できるレベルでの教えを心からお願いします。
VC2012++を使うにあたり、一夜漬け勉強をしたのですが全く間に合っていません。
今回戴いた回答で、とりあえずの目的は達成できたのですが、次の項目についてアドバイスを戴きたくお願いします。
(1)静的リンク=マルチスレッド の発想ができません。キーワードを指定してのヘルプ検索のヒントをご教示ください。
(2)「上級者用の設定」の文言も気がかりです。見つけ方を教えてください。
(3)良い参考書があればご教示ください。

補足日時:2013/05/12 11:55
    • good
    • 0

>言い換えると .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の実行可能なモジュールを作る方法です。
どこでどのように設定すればよいのか教えてください。

補足日時:2013/05/11 16:48
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!