トップ回答者
vc++ 2010 でデバッグ情報の形式から ”無し”が選択できません

質問
-
いつもお世話になっております
--------------------------------------------------------------------------------------------
開発環境:Win7 x86JP、VS2010 Professional SP1
32bit/64bit
言語:Visual C++、MFC
プロジェクトは、アプリケーションウィザードで、WIN32アプリケーションを選択し、スタティックライブラリ
としています。
--------------------------------------------------------------------------------------------
症状
コンパイルオプションの”デバッグ情報の形式”で、”なし”の選択ができません。
以下のように選択していき、”なし”を選択しようとしても、Z7,Zi,ZIの3種類しか出てきません。
構成プロパティ → C/C++ → 全般 → デバッグ情報の形式
出力された、ライブラリの大きさが、debugよりreleaseの方が倍以上大きいため、上記の選択が
できないことによるのではないかと疑っています。
どなたか、ご存知の方がいらっしゃいましたら、ご教授お願いいたします。
回答
-
HomeClosetさんが提示されたスレッドを確認しましたが、最適化機能を抑止しています。
たとえば最適化オプションのLTCG;リンク時コード生成をOFFにしています。従来のリンカが行うリンクはオブジェクトファイルを結合してexeやdllを生成するだけでした。LTCGはリンク時、オブジェクトファイルが揃った段階で再度コンパイル、コード生成を行います。このためにはオブジェクトファイルにソースコード相当のデータが必要になるのは当然ですし、それによるサイズ増加は避けられません。
static libraryのサイズを何が何でも小さくしたいのか、static libraryが大きくともそれを使ってリンクされたexeやdllのサイズに問題がなければいいのか、static libraryのサイズ増加の理由が分かればいいのか、目的をはっきり定めた方がいいでしょう。- 回答としてマーク terywest 2012年11月1日 4:53
すべての返信
-
-
ちなみに、プロジェクトファイルをテキストエディタで開いて削除すると
releaseのファイルの大きさが、さらに大きくなりました。
日本語難しかったですか?
- プロパティページを開いて
- 左ツリーの 構成プロパティ - C/C++ - 全般 を選択し、
- 右側で デバッグ情報の形式 を選び、
- 「プログラム データベース (/Zi)」などの文字列をキーボードのDeleteキーやBack Spaceキーを連打する
ことを指して「無理矢理Deleteする」と書きました。
追記
テキストエディタでプロジェクトファイルかの該当箇所を削除する行為は、プロパティページの該当箇所を <親またはプロジェクトの既定値から継承> を選択する行為に相当します。そのため再度、プロパティページを開き直すと(太字でなくノーマルウェイトで)「プログラムデータベース (/Zi)」が出現していることでしょう。
この場合、もちろんプロパティページの表示通りコンパイルオプションに /Zi が追加されます。- 編集済み 佐祐理 2012年10月31日 22:32
-
HomeClosetさんが提示されたスレッドを確認しましたが、最適化機能を抑止しています。
たとえば最適化オプションのLTCG;リンク時コード生成をOFFにしています。従来のリンカが行うリンクはオブジェクトファイルを結合してexeやdllを生成するだけでした。LTCGはリンク時、オブジェクトファイルが揃った段階で再度コンパイル、コード生成を行います。このためにはオブジェクトファイルにソースコード相当のデータが必要になるのは当然ですし、それによるサイズ増加は避けられません。
static libraryのサイズを何が何でも小さくしたいのか、static libraryが大きくともそれを使ってリンクされたexeやdllのサイズに問題がなければいいのか、static libraryのサイズ増加の理由が分かればいいのか、目的をはっきり定めた方がいいでしょう。- 回答としてマーク terywest 2012年11月1日 4:53
-
HomeClosetさんが提示されたスレッドを確認しましたが、最適化機能を抑止しています。
たとえば最適化オプションのLTCG;リンク時コード生成をOFFにしています。従来のリンカが行うリンクはオブジェクトファイルを結合してexeやdllを生成するだけでした。LTCGはリンク時、オブジェクトファイルが揃った段階で再度コンパイル、コード生成を行います。このためにはオブジェクトファイルにソースコード相当のデータが必要になるのは当然ですし、それによるサイズ増加は避けられません。
static libraryのサイズを何が何でも小さくしたいのか、static libraryが大きくともそれを使ってリンクされたexeやdllのサイズに問題がなければいいのか、static libraryのサイズ増加の理由が分かればいいのか、目的をはっきり定めた方がいいでしょう。1.元々、releaseのサイズがdebugのサイズの11倍以上あり、なぜこんなにサイズに差がありすぎるのか、なぜdebugよりreleaseの方が大きいのか、ということが発端でした。”releaseのサイズが大きいことは正しい結果”と理由がわかれば、疑問は解消しました。
2.”デバッグ情報の形式”を教えていただいた方法で削除し、再度、確認しました。
結果は、ファイルから直接”デバッグ情報の形式”を削除した時と同じで、ファイルの大きさが大きくなっていました。
元は約57Mbyte → 約77Mbyte
プロパティページで確認すると、佐祐理さんのおっしゃられる表示(何も表示されない状態)になっていました。これの原因はわかりませんが、とりあえずもとの状態で使用するように設定を直しました。
以上、お忙しいところ、ご丁寧に教えていただきありがとうございました。