我正在編譯一個開源項目,它沒有聲明sincos
函數沒有聲明。當我查看math.h
時,聲明就在那裏。我在math.h
的頂部添加了一個警告,看它是否包含在內(如果有的話,會打印警告),並且在編譯代碼時實際上從未打印過。因此,我認爲它可能包含在/usr/include/math.h
以外的地方。如何找出g ++包含哪個頭文件?
問題是它是一個巨大的代碼庫,並且就手工跟蹤包含目錄等而言是相當困難的。
有沒有一種方法可以告訴g ++打印包含它所解決的全部路徑的完整路徑?
我正在編譯一個開源項目,它沒有聲明sincos
函數沒有聲明。當我查看math.h
時,聲明就在那裏。我在math.h
的頂部添加了一個警告,看它是否包含在內(如果有的話,會打印警告),並且在編譯代碼時實際上從未打印過。因此,我認爲它可能包含在/usr/include/math.h
以外的地方。如何找出g ++包含哪個頭文件?
問題是它是一個巨大的代碼庫,並且就手工跟蹤包含目錄等而言是相當困難的。
有沒有一種方法可以告訴g ++打印包含它所解決的全部路徑的完整路徑?
您可以使用-E
選項僅運行預處理器。這將在所有頭文件預處理後生成源代碼,這可能會很長。
相反,您可以生成一個生成文件來顯示依賴關係。如果使用-E -M
,則應該看到文件依賴的所有包含文件的列表。
本身,'-E'可能很難閱讀 - 增加'-C'保留註釋,使上下文更容易遵循。 – 2015-04-05 10:36:46
除了g++ -E -C
,我發現-v
參數對這種情況很有用。它會給你所有的默認搜索路徑/ sysrooty的東西,以及任何傳遞給子工具的默認內部參數。
此外,該命令會告訴你gcc是否嘗試使用不存在的缺省包含路徑,這在錯誤配置的gcc工具鏈中是一個常見問題。
在'C++'中你應該包含''。頭文件'math.h'是'C'版本。 –
Galik
2015-04-04 03:12:09