在可可基礎的紀錄片中,它提到了不同的編譯器。 gcc,LLVM-GCC和Clang。有沒有人明確知道他們在做什麼以及何時使用它們?不同的編譯器之間有什麼區別
回答
他們都做同樣的事情,產生可以鏈接在一起構建程序(或共享庫)的可執行目標代碼。他們只是以不同的方式做到這一點。
- gcc是一個悠久的老編譯器,它在牙齒上變得有點長,但仍然是幾乎整個開源世界的主要力量。它也是現存最便攜的編譯器。
- LLVM-GCC是LLVM項目的一個組件,它使用gcc解析器前端和LLVM代碼生成後端。
- Clang是使用LLVM後端的特定於LLVM的前端。它本質上是一個潔淨室編譯器,它承諾編譯速度比gcc更快,編譯效率更高,全部來自更小和更乾淨的代碼庫(謝謝@dreamlax)。
關於此問題的更多信息,請登錄LLVM網站。
- gcc:GNU Compiler Collection。非常便攜的編譯器,適用於多種不同語言根據GPL授權。
- LLVM-gcc:使用GCC的前端解析程序代碼,但使用LLVM生成機器碼。
- Clang:使用LLVM生成機器碼的類似C語言(C,C++,Objective-C)的新前端。
Apple建議您始終使用Clang。 Clang的主要優點是速度更快,能夠產生更好的診斷信息(警告和錯誤)。此外,來自clang的生成代碼通常比來自GCC的代碼更快。
Xcode 3附帶的Clang版本尚不支持C++(或Objective-C++),因此Xcode將使用LLVM-GCC for C++。
這是Clang和GCC的更多detailed comparison。
Apple建議您使用clang嗎?當前生產的Xcode(3.2.x)默認爲gcc。這表明該建議仍然適用於gcc生產。毫無疑問,這將改變在不久的將來 – JeremyP 2010-11-04 09:18:19
蘋果確實建議你使用鏗鏘聲,如果可以的話。默認情況下仍然是GCC,因爲有相當數量的代碼不能在叮噹中使用(而且也可能永遠不會),並且Apple正在努力避免混淆開發人員。您可以預計,未來的某個時間點,默認設置會變爲叮噹聲。 – 2010-11-04 09:19:57
- 1. 編譯器和鏈接器之間有什麼區別?
- 2. 未編譯和編譯的ASP.NET頁面之間有什麼區別
- 3. 可用的不同HttpClient之間有什麼區別?
- 4. ConstraintSet中clone()的不同實現之間有什麼區別?
- 5. 調試和編譯有什麼區別?
- 6. SBT編譯與compileIncremental之間的區別
- 7. Matlab中不同高斯函數之間有什麼區別?
- 8. 不同Sygic地圖類型之間有什麼區別?
- 9. 需要重新編譯的分析器和那些不需要的分析器之間有什麼區別?
- 10. 編譯器之間的不同輸出
- 11. dpm()和dsm()之間有什麼區別?
- 12. @dynamic和@synthesize之間有什麼區別?
- 13. vbNullString和「」之間有什麼區別嗎?
- 14. * zoom和zoom之間有什麼區別?
- 15. String.Concat,string.format和+之間有什麼區別?
- 16. Android:view.getX()之間有什麼區別view.getTranslationX()
- 17. StaticLayout和DynamicLayout之間有什麼區別
- 18. WebServiceBinding.EmitConformanceClaims和WebServiceBinding.ConformanceClaims之間有什麼區別?
- 19. :: after和after之間有什麼區別?
- 20. %.02f和%.2f之間有什麼區別?
- 21. {$ var}和$ var之間有什麼區別?
- 22. ReleaseFloatArrayElements和DeleteLocalRef之間有什麼區別
- 23. {0}和「」之間有什麼區別?
- 24. getA()和this.getA()之間有什麼區別?
- 25. @observable和@published之間有什麼區別
- 26. $ {}和#{}之間有什麼區別?
- 27. url.getFile()和getpath()之間有什麼區別?
- 28. KVC和Properties之間有什麼區別?
- 29. Lazy.Force()和Lazy.Value之間有什麼區別
- 30. 「層」和「層」之間有什麼區別?
Clang的源代碼更清潔。我曾經看過GCC源代碼,但仍未完全恢復;我仍然偶爾做惡夢。 – dreamlax 2010-11-04 09:01:02
LLVM-gcc使用gcc前端和LLVM後端,而不是其他方式。 – JeremyP 2010-11-04 09:15:39
@JeremyP:感謝您的糾正。 – 2010-11-04 09:25:05