none
vc++ 2010 でデバッグ情報の形式から ”無し”が選択できません RRS feed

  • 質問

  • いつもお世話になっております

    --------------------------------------------------------------------------------------------

    開発環境:Win7 x86JP、VS2010 Professional SP1

           32bit/64bit

    言語:Visual C++、MFC

    プロジェクトは、アプリケーションウィザードで、WIN32アプリケーションを選択し、スタティックライブラリ

    としています。

    --------------------------------------------------------------------------------------------

    症状

    コンパイルオプションの”デバッグ情報の形式”で、”なし”の選択ができません。

    以下のように選択していき、”なし”を選択しようとしても、Z7,Zi,ZIの3種類しか出てきません。

    構成プロパティ → C/C++ → 全般 → デバッグ情報の形式

    出力された、ライブラリの大きさが、debugよりreleaseの方が倍以上大きいため、上記の選択が

    できないことによるのではないかと疑っています。

    どなたか、ご存知の方がいらっしゃいましたら、ご教授お願いいたします。

    2012年10月31日 6:55

回答

  • HomeClosetさんが提示されたスレッドを確認しましたが、最適化機能を抑止しています。
    たとえば最適化オプションのLTCG;リンク時コード生成をOFFにしています。従来のリンカが行うリンクはオブジェクトファイルを結合してexeやdllを生成するだけでした。LTCGはリンク時、オブジェクトファイルが揃った段階で再度コンパイル、コード生成を行います。このためにはオブジェクトファイルにソースコード相当のデータが必要になるのは当然ですし、それによるサイズ増加は避けられません。

    static libraryのサイズを何が何でも小さくしたいのか、static libraryが大きくともそれを使ってリンクされたexeやdllのサイズに問題がなければいいのか、static libraryのサイズ増加の理由が分かればいいのか、目的をはっきり定めた方がいいでしょう。
    • 回答としてマーク terywest 2012年11月1日 4:53
    2012年10月31日 22:34

すべての返信

  • プルダウンメニューには候補がありませんが、無理矢理Deleteすると「なし」相当になり、コンパイルオプションから /Z7 /Zi /ZI いずれも指定されなくなりました ←

    ちなみにVisual Studio 2012では「なし」が選択できるようになっていました!!!

    # バグですよねぇ…

    2012年10月31日 7:57
  • HomeClosetさん

    回答ありがとうございました。

    教えていただいたサイトの通りに設定したところ、releaseのサイズが、debugのサイズとほぼ

    同じくらいになりました。

    releaseのサイズ

    設定前    →     設定後

    57Mbyte位       5Mbyte位

    2012年10月31日 9:55
  • 佐祐理さん

    回答ありがとうございます。

    やはり、バグなんですか・・・

    直すつもりはないのですかねぇ

     

    ちなみに、プロジェクトファイルをテキストエディタで開いて削除すると

    releaseのファイルの大きさが、さらに大きくなりました。

    2012年10月31日 10:07
  • ちなみに、プロジェクトファイルをテキストエディタで開いて削除すると

    releaseのファイルの大きさが、さらに大きくなりました。

    日本語難しかったですか?

    1. プロパティページを開いて
    2. 左ツリーの 構成プロパティ - C/C++ - 全般 を選択し、
    3. 右側で デバッグ情報の形式 を選び、
    4. 「プログラム データベース (/Zi)」などの文字列をキーボードのDeleteキーやBack Spaceキーを連打する

    ことを指して「無理矢理Deleteする」と書きました。

    追記

    テキストエディタでプロジェクトファイルかの該当箇所を削除する行為は、プロパティページの該当箇所を <親またはプロジェクトの既定値から継承> を選択する行為に相当します。そのため再度、プロパティページを開き直すと(太字でなくノーマルウェイトで)「プログラムデータベース (/Zi)」が出現していることでしょう。
    この場合、もちろんプロパティページの表示通りコンパイルオプションに /Zi が追加されます。
    • 編集済み 佐祐理 2012年10月31日 22:32
    2012年10月31日 11:26
  • 佐祐理さん

    何度もありがとうございます。

    指摘された方法での削除ではなく、直接やってしまいました。

    教えていただいた方法で確認してみます。

    2012年10月31日 11:49
  • HomeClosetさんが提示されたスレッドを確認しましたが、最適化機能を抑止しています。
    たとえば最適化オプションのLTCG;リンク時コード生成をOFFにしています。従来のリンカが行うリンクはオブジェクトファイルを結合してexeやdllを生成するだけでした。LTCGはリンク時、オブジェクトファイルが揃った段階で再度コンパイル、コード生成を行います。このためにはオブジェクトファイルにソースコード相当のデータが必要になるのは当然ですし、それによるサイズ増加は避けられません。

    static libraryのサイズを何が何でも小さくしたいのか、static libraryが大きくともそれを使ってリンクされたexeやdllのサイズに問題がなければいいのか、static libraryのサイズ増加の理由が分かればいいのか、目的をはっきり定めた方がいいでしょう。
    • 回答としてマーク terywest 2012年11月1日 4:53
    2012年10月31日 22:34
  • HomeClosetさんが提示されたスレッドを確認しましたが、最適化機能を抑止しています。
    たとえば最適化オプションのLTCG;リンク時コード生成をOFFにしています。従来のリンカが行うリンクはオブジェクトファイルを結合してexeやdllを生成するだけでした。LTCGはリンク時、オブジェクトファイルが揃った段階で再度コンパイル、コード生成を行います。このためにはオブジェクトファイルにソースコード相当のデータが必要になるのは当然ですし、それによるサイズ増加は避けられません。

    static libraryのサイズを何が何でも小さくしたいのか、static libraryが大きくともそれを使ってリンクされたexeやdllのサイズに問題がなければいいのか、static libraryのサイズ増加の理由が分かればいいのか、目的をはっきり定めた方がいいでしょう。

    1.元々、releaseのサイズがdebugのサイズの11倍以上あり、なぜこんなにサイズに差がありすぎるのか、なぜdebugよりreleaseの方が大きいのか、ということが発端でした。”releaseのサイズが大きいことは正しい結果”と理由がわかれば、疑問は解消しました。

    2.”デバッグ情報の形式”を教えていただいた方法で削除し、再度、確認しました。

     結果は、ファイルから直接”デバッグ情報の形式”を削除した時と同じで、ファイルの大きさが大きくなっていました。

     元は約57Mbyte → 約77Mbyte

    プロパティページで確認すると、佐祐理さんのおっしゃられる表示(何も表示されない状態)になっていました。これの原因はわかりませんが、とりあえずもとの状態で使用するように設定を直しました。

    以上、お忙しいところ、ご丁寧に教えていただきありがとうございました。


    • 編集済み terywest 2012年11月1日 4:52
    • 回答としてマーク terywest 2012年11月1日 4:52
    • 回答としてマークされていない terywest 2012年11月1日 4:53
    2012年11月1日 4:51