自行查詢資料, 調研除了gcc, 還有哪些常用的牛逼的編譯器(不限制程式語言, 不限制平臺)
阿新 • • 發佈:2018-12-18
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