我知道這是一個很愚蠢的問題。我幾乎不知道編譯器是如何工作的。如何找到編譯器爲我的代碼生成的符號名稱?
但最近我想找到編譯器爲我的伊娃,我的方法生成什麼樣的符號名稱。 我在哪裏以及如何知道答案? (我只使用了一些IDE,所以如果解決方案更簡單,如果你提供的指令是非常明確的,那將是非常有幫助的)
(順便說一下,有沒有我可以學習的參考關於這樣的事情?)
PS.I'm IOS developer.And如果gcc和LLVM在這個問題上工作不同的答案,我想知道這兩個。
我知道這是一個很愚蠢的問題。我幾乎不知道編譯器是如何工作的。如何找到編譯器爲我的代碼生成的符號名稱?
但最近我想找到編譯器爲我的伊娃,我的方法生成什麼樣的符號名稱。 我在哪裏以及如何知道答案? (我只使用了一些IDE,所以如果解決方案更簡單,如果你提供的指令是非常明確的,那將是非常有幫助的)
(順便說一下,有沒有我可以學習的參考關於這樣的事情?)
PS.I'm IOS developer.And如果gcc和LLVM在這個問題上工作不同的答案,我想知道這兩個。
您可以使用nm來轉儲二進制對象的內容。然後,每個編譯器都有自己的方法。我建議你看看Name mangling for objective C in wikipedia,它會幫助你瞭解如何運作。
當然,GCC和Clang必須具有兼容的名稱修改方案,因爲它們可以使用彼此的代碼。
如果您使用的是XCode 3,請選擇一個源文件,然後從Build菜單中選擇「Show Assembly Code」。
顯然的XCode 4用戶無需彙編代碼:-(
它不是一個真正的愚蠢的問題。有一點要考慮GCC編譯C,C++,Java和Objective-C中的Objective-C++,Pascal和其他人。所有這些語言的設計和工作都是不同的,並且具有不同的功能,所以GCC或Llvm不會做一件事。聽起來像你真正想知道的是如何編譯C和Objective-c。 '你可能想首先研究C. – hooleyhoop 2011-04-14 14:40:44