2013年11月3日 星期日

VC6編譯出現的警告訊息LINK : warning LNK4089: all references to “ODBC32.dll” discarded by /OPT:REF

VC6編譯時Debug版本下沒問題,release版本下出現如下警告:
LINK : warning LNK4089: all references to “ODBC32.dll” discarded by /OPT:REF
LINK : warning LNK4089: all references to “ADVAPI32.dll” discarded by /OPT:REF
LINK : warning LNK4089: all references to “SHELL32.dll” discarded by /OPT:REF
LINK : warning LNK4089: all references to “comdlg32.dll” discarded by /OPT:REF
錯誤原因:
由於打開了優化選項,而且程式中包含或加入了ODBC32.dll、ADVAPI32.dll、SHELL32.dll、comdlg32.dll,但是卻沒有調用該庫中的任何函數或方法, 所以系統給個通知,這有助於減小體積。
這個問題一般出現在release版中,當release版編譯時會對代碼進行優化,將程式中實際上並沒用到的,而在project中連結了的動態庫放棄而不編譯到project中去。可在project設定中的Link中的input中ingore libraries中將該庫的lib檔案名輸入。

解決方法:
  • 其實不用管這種警告,因為它不會影響程式。
  • 如下方法可以去除警告
    1. 在project->settings->linking->projects options最後面加上/OPT:NOREF
    2. #pragma comment(linker, "/ignore:4089") 取消警告
    3. #pragma warning(disable:   4089) 取消警告


沒有留言:

張貼留言