庫不總是包含_mcount符號,但應用程序可以(您可以使用gobjdump或nm工具來驗證)。我讀過_mcount用於實現分析,但是即使禁用了分析並啓用了優化(-O2),符號仍然存在。它是否有其他用途?爲什麼由GCC編譯的應用程序總是包含_mcount符號?
更新:我在Solaris上,所以這是Solaris鏈接器與GCC結合,我不確定這是否有所作爲。 GCC版本是4.2.2。即使我編譯的文件只包含代碼int main() { return 0; }
而沒有鏈接庫,也會發生這種情況。
UPDATE2:I型:
$ g++ -O2 mytest.cpp
$ nm a.out | grep _mcount
[65] | 134547444| 1|FUNC |GLOB |0 |11 |_mcount
和g ++是沒有別名任何東西。另外,我嘗試使用Sun CC編譯器進行編譯,但沒有這個問題。我也試過更新GCC,符號依然存在於4.4.1中。
你的系統沒有碰到有'gcc'(或者你正在使用的命令)別名到某些使用默認開關調用編譯器的東西,是嗎?你可以發佈你正在使用的確切電話來編譯這個嗎? – 2010-01-08 17:51:52
沒有別名,用命令更新後。 – 2010-01-08 18:51:46