今日の教訓.

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に依存するコードが出来上がる.というお話.

対策は,最適化をほどほどにするか,そもそものソースの段階でうまく処理するかのどちらか.