質問者
.lib ファイルがDebugビルド構成( /Z* オプションを伴う )でビルドされた物か否かを判別する方法はある?

質問
-
【要旨】
タイトルの事に関し、方法があるか? ある場合の操作方法は何か? を、恐れ入りますが伺わせて頂けないでしょうか。
↓を探したのですが、実験したら .exe と .dll だけOKで、.lib ( .obj も )ではNGでした。どうぞよろしくお願い致します。
https://social.msdn.microsoft.com/Forums/ja-JP/124a7c19-e768-4bfb-a478-425e8dd7d58d/23455348921250112449124521252312395124871249612483124642477322?forum=windowsgeneraldevelopmentissuesja
【環境】
・VS2015 のVC++
・.libのプラットフォームタイプは x64
・MFC不使用
すべての返信
-
.lib ファイルをメモ帳で開くと、cl.exe あるいは c2.dll に渡している /Z* を含むオプションを確認することができました。
私のところで作成した .lib (x64) ファイルは、下記のようになっていました。
Debug 版 lib → cl.exe の後に
cmd -c -ZI -nologo -W3 -WX- -Od -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MDd -GS -fp:precise ...Release 版 lib → c2.dll の後に
-typedil -f C:\Users\kenjinote\Desktop\StaticLib1\StaticLib1\stdafx.cpp -dos -Zi -W 3 -Og -Ob2 -EHs -MD -GS -Gy -FitObjFunc -FitObjData -Yc ...- 編集済み kenjinoteMVP 2018年6月12日 7:41
-
.libファイルは拡張子だけでは判断できず、スタティックリンクライブラリと、ダイナミックリンクライブラリのインポートファイルとの2種類が存在します。前者についての質問として回答します。
/Z7 /Zi /ZI オプションが指定された場合、 .debug$T というセクションに情報が書き込まれるようです。 dumpbin static.lib を実行した結果に当該行が含まれているかで判断されてはどうでしょうか?
ただし、一般的にReleaseビルド構成であっても /Zi を付与しますから、「/Z* オプションを伴う )でビルドされた物か否かを判別する方法」は判断できますが「Debugビルド構成でビルドされた物か否かを判別する方法」には効力がありません。
この辺りについては質問文を明確にしてください。 -
> /Z7 /Zi /ZI オプションが指定された場合、
> .debug$T というセクションに情報が書き込まれるようです。
> dumpbin static.lib を実行した結果に当該行が含まれているかで
> 判断されてはどうでしょうか?"msvcrt.lib" と "msvcrtd.lib" を確認すると、いずれも ".debug$T" というセクションが存在しています。
Release Build の場合でも将来的なメンテナイスを考慮し、pdb ファイルを生成しておくシナリオは十分に考えられると思います。
(というか、pdb ファイルを生成しない理由が私には思い浮かばない。。。) -
.lib ファイルをメモ帳で開くと、cl.exe あるいは c2.dll に渡している /Z* を含むオプションを確認することができました。
私のところで作成した .lib (x64) ファイルは、下記のようになっていました。
Debug 版 lib → cl.exe の後に
cmd -c -ZI -nologo -W3 -WX- -Od -D_DEBUG -D_LIB -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MDd -GS -fp:precise ...Release 版 lib → c2.dll の後に
-typedil -f C:\Users\kenjinote\Desktop\StaticLib1\StaticLib1\stdafx.cpp -dos -Zi -W 3 -Og -Ob2 -EHs -MD -GS -Gy -FitObjFunc -FitObjData -Yc ...残念ながら、手元の.lib( DLLの暗黙的リンク用インポートライブラリを含む、静的ライブラリ )群には、上記のような「 ツールチェーンの実行ファイル名や、それに指定されたオプション引数群 」は含まれていませんでした。
含まれるようにするためのオプションがあるのかもしれません。
でも、わざわざお手数をかけてご返答下さり、有難うございました。