1. 程式人生 > >自行查詢資料, 調研除了gcc, 還有哪些常用的牛逼的編譯器(不限制程式語言, 不限制平臺)

自行查詢資料, 調研除了gcc, 還有哪些常用的牛逼的編譯器(不限制程式語言, 不限制平臺)

1.除了gcc, 還有哪些常用的牛逼的編譯器(不限制程式語言, 不限制平臺) 

EGCS:包括了C/C++/Obj-C/Fortran等編譯器 

Clang:licence極度友好,程式碼質量非常棒,採用的IR為LLVM IR非常優秀,但是Clang依賴於的LLVM,目前的效能無法與GCC相提辯論,缺乏對GCC一些Builtin函式、自身帶的彙編器的孱弱,對一些開源軟體沒有辦法編譯過去。

ICC:沒有自己專門的前端(傳說中的外包),而且是針對Intel體系結構上專門優化。

IBM XL C++:在IBM特定硬體與平臺上表現非常牛逼,Benchmark效能測試非常優秀,但是在編譯時間上過長,對C++標準的支援、開源軟體的支援、錯誤資訊的提示上都不夠友好。

2.為什麼除錯的時候需要編譯選項中新增 -g?

在 Linux 中,我們常用 gcc編譯生成可執行檔案, 但是可執行程式中沒有可供 gdb 除錯使用的特殊資訊,無法使用 gdb 來跟蹤或除錯,因此我們需使用到 -g 選項,這樣生成的可執行程式就可以使用 gdb 找出出現問題的位置,從而解決問題。

3. readelf命令

(1)readelf用來顯示一個或者多個elf格式的目標檔案的資訊,可以通過它的選項來控制顯示哪些資訊。這裡的elf-file(s)就表示那些被檢查的檔案。可以支援32位,64位的elf格式檔案,也支援包含elf檔案的文件(這裡一般指的是使用ar命令將一些elf檔案打包之後生成的例如lib*.a之類的“靜態庫”檔案)。

(2)選項

在 Linux 中輸入 man readelf