我更新一些舊代碼,不小心留下一個宏中已不存在定義:爲什麼在編譯時沒有捕獲到「符號查找錯誤」?
// "DETAIL" is not defined anywhere
if (DETAIL ("notebook")) {
// ...
}
的代碼仍然編譯和鏈接(其一個.so庫),但加載時,我得到:
gtk3-widget-factory: symbol lookup error: /usr/lib/gtk-3.0/3.0.0/
theming-engines/libmurrine.so: undefined symbol: DETAIL
爲什麼不在編譯時捕獲?我想C看到DETAIL
沒有任何定義,並認爲它是一個函數int -> int
,對吧?有沒有辦法讓編譯器(gcc)在編譯時更加嚴格和抱怨?我不認爲我直接在我的源文件或頭文件中使用沒有定義的任何符號。
您將無法使用代碼編譯可執行文件(鏈接程序會失敗),但是在庫中帶有未定義函數的代碼仍然會鏈接。 – teppic 2013-03-13 11:39:04