今日の教訓.
VC.netでC/C++の最適化を「最大限の最適化(“/Ox”)」にすると,リンカの参照の「参照されないデータを消去(“/OPT:REF”)」がうまく働かなくなるようで,使ってないDLLに依存するような事が起きる.
どういうことかというと,ライブラリaa.dllを参照するコードと,aa.dllを参照しないコードを含むソースbb.cppと,bb.cppのaa.dllを参照しないコードだけを利用するソースcc.cppがあったときに,bb.cppとcc.cppから最大限の最適化でビルドすると,aa.dllを使わないにも拘らずaa.dllに依存するコードが出来上がる.というお話.
対策は,最適化をほどほどにするか,そもそものソースの段階でうまく処理するかのどちらか.