C語言作為高級語言,用其編寫的程序指令機器并不能識別,因此需要有一個編譯器將其轉換為機器可識別的二進制指令。C語言已經出現50多年的時間,其相關的編譯器種類眾多,從最早先的turbo c系列編譯器,到大名鼎鼎的gcc,還有基于LLVM的clang,各有優劣,而且在多個平臺(如windows、linux、mac)上都廣泛使用。同時由于Windows的強勢存在,其自家的Visual C/C++編譯器也有不少的應用。
一般C語言程序是在PC上編寫,并將其編譯成可執行文件,最終放到電腦或設備上去執行。
現在主流PC的CPU架構+操作系統組合有多種,其編譯生成的可執行程序可能在不同的架構下執行,因此對于同一類編譯器,可能需要針對CPU架構和系統組合也要有相應的版本。
注:蘋果自研的ARM架構CPU M1將會在2022年用于最新的MAC pro筆記本中。
編譯程序一般分為兩種情況(如下舉例):
A、 在X86+Windows系統下編譯C程序,可以直接在X86+Windows系統的PC上直接執行;
B、 在X86+Windows系統下需要x86-Arm交叉編譯器編譯C程序,才能在ARM平臺設備上執行;
因此需要根據開發編譯平臺與目標運行平臺選擇編譯器類別,而有些IDE集成了官方對應的C編譯,安裝就可以使用,如:
1、對于Visual C/C++編譯器,集成開發環境Visual Studio也集成了Visual C/C++編譯器,安裝Visual Studio后,即可IDE中編輯/編譯C程序;
2、對于ARM(R/M系列)和8051系列,集成開發環境(IDE)中可能已經集成了交叉編譯器環境,如MDK KEIL中已經集成了ARMCC交叉編譯器,安裝MDK后,就可以在IDE中編輯/編譯C程序。
C編譯器很多,以下分別介紹當前主流的幾個C編譯器!首先是大名鼎鼎的GCC編譯器。
一、GCC編譯器
GCC是(GNU Compiler Collection)的縮寫,是由GNU開發的編程語言譯器。最初是為C語言而編寫,后面陸陸續續擴充了C++、 Objective-C、 Fortran、JAVA、Ada和Go語言,也包括了這些語言的庫(如libstdc++,libgcj等),因此GCC是GNU編譯器套件。
Gcc編譯器鏡像在其官方FTP服務器上可以下載,目前最新版本為gcc-11.2.0。
1、 gcc for ARM
當今移動端手機處理器基本上是基于ARM架構,而許多智能設備或物聯網設備內置芯片的CPU內核也是基于ARM,因此,ARM公司也不斷更新維護針對ARM架構的交叉c編譯器。
ARM從1985年設計的ARMv1芯片,到現在ARMv9,已經有30幾年的歷史,各個架構典型的處理器版本如下表所示:
目前廣泛使用的是ARMv7、ARMv8;ARMv7在智能設備芯片、微處理器MCU上應用比較多,比如NXP推出的IM6ULL采用ARM Cortex-A7,ST推出的STM32F4采用ARM Cortex-M4內核;而目前流行的手機處理器,基本都是ARMv8架構中的Cortex-A系列中,比如現在華為P50系列的麒麟9000處理器就是采用ARM Cortex-A77,小米11系列的驍龍888處理器采用ARM Cortex-A78,因此,理論上驍龍888比麒麟9000處理器會強一些。
ARMv9架構是ARM今年剛推出的全新的下一代架構,首款基于Armv9架構的大核CPU Arm Cortex-A710以及首款高效率小核Arm Cortex-A510的手機,估計明年會到來。
ARMv8的架構繼承以往ARMv7與之前處理器技術的基礎,除了現有的16/32bit的Thumb2指令支持外,也向前兼容和擴充了現有A32(ARM 32bit)指令集的AArch32架構 ,新增了基于64bit的AArch64架構;
A、 基于32位Arm Cortex-A, Arm Cortex-M, and Arm Cortex-R處理器的GCC交叉編譯工具鏈(基本上ARMv7架構下使用),ARM開發者網站提供了下載,包含Windows, Linux, Mac OS X操作系統平臺,目前最新版本為10.3-2021.07,下載地址:
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
A、 基于AArch32(擴充版32位)與AArch64(新增64位)的交叉編譯器(ARMv8架構下),ARM開發者網站提供了下載,包含Windows, Linux, Mac OS X操作系統平臺,目前最新版本為10.3-2021.07,下載地址:
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads
2、 Linux下gcc編譯器
Linux一般自帶gcc編譯器,可以通過gcc –v查看其版本號,如下圖:
從打印信息中 “Target:x86-64-linux-gnu”,可以看出默認的gcc編譯器是針對x86架構的,因此編譯得出的可執行文件只能在x86架構下執行;而一般情況是在Linux下開發編譯C程序,然后在ARM下執行,因此需要安裝交叉編譯C編譯器。
在ARM官網上可以下載最新版本,或芯片廠家會提供對應修改過的版本,同時有些第三方組織提供修改過的編譯器版本,如Linaro GCC編譯器,下載地址為:
https://snapshots.linaro.org/components/toolchain/
按以上4個步驟下載gcc-linaro-4.9.4-2017.01-
x86_64_arm-linux-gnueabihf.tar版本編譯器,并上傳至ubuntu系統中,拷貝到目錄/usr/local/arm中對交叉編譯工具進行解壓,解壓命令如下:sudo tar –vxf gcc-linaro-4.9.4-2017.01- x86_64_arm-linux-gnueabihf.tar,解壓完成會生成一個名為gcc-linaro-4.9.4-2017.01- x86_64_arm-linux-gnueabihf的文件夾就是交叉編譯工具鏈。
然后修改環境變量,執行sudo vi /etc/profile命令打開/etc/profile文件,在文件末尾添加PATH路徑,這樣交叉編譯工具鏈就安裝成功。
最后執行命令sudo apt-get install lsb-core lib32stdc++6安裝標準C庫, 然后讀取版本號驗證工具鏈安裝正確。
3、 Windows下的gcc編譯器
3.1、MinGW-w64編譯器
MinGW-w64編譯器是gcc編譯器的Windows版本,MinGW 的全稱是:Minimalist GNU on Windows,它也是一個可自由使用和自由發布的Windows特定頭文件和使用GNU工具集導入庫的集合,它使用 Windows 的C語言運行庫,可以將C源碼編譯成可在Windows下執行。
進入MinGW-w64下載最新版本的編譯器:
http://www.mingw-w64.org/doku.php
當前最新版本為V.9.0.0,點擊Downloads下載,進入下載頁面;MinGW-w64 的代碼和可執行文件被托管存儲在 SourceForge 上,如下鏈接地址:
https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/
往下拉找到可執行文件MinGW-W64-install.exe,下載直接雙擊安裝,不用去編譯源代碼。
需要連接網絡在線安裝mingw-w64-install.exe,在進行版本和主機架構選擇后就會自動下載mingw組件。
組件下載完成后,在bin目錄下包含了各種工具,如:gcc.exe,g++.exe,gdb.exe,將bin文件夾路徑添加到系統環境變量PATH中,至此,mingw安裝完成。
驗證mingw編譯功能。
3.2、集成開發環境(IDE)
以上使用mingw編譯C語言采用的是命令行的形式,對于學習C語言來說是非常清晰的,但是開發項目時C文件數量眾多,一個個編譯顯得不現實,因此需要編寫makefile來統一編譯管理,這樣就回到了Linux下的C語言編程,體現不出Windows桌面系統的優勢,因此在Windows下,許多集成開發環境(IDE)集成了MinGW編譯器,PC應用開發的工具有QT,Code::Blocks,Dev C++ ,C-Free等,嵌入式開發的工具有MDK(KEIL),IAR等。
3.2.1、QT
QT是一個跨平臺的開發環境,WINDOWS/LINUX/MAC下都可以用,同一套代碼分別在三個平臺下編譯就可生成各個平臺的應用程序,其下載的官方網站如下:
https://download.qt.io/archive/qt/;
目前最新版本為6.1,選擇一個合適版本下載安裝,QT在安裝時可以選擇配套的MinGW版本,這樣編寫C/C++項目工程時,一鍵編譯就很方便。
3.2.2、Code::Blocks
Blocks是一個免費的C/ c++和Fortran IDE,IDE集成了MinGW編譯器,官方下載地址如下:
https://www.codeblocks.org/downloads/。
下載后直接安裝即可。
3.2.3、Dev-C++
devc ++是一個免費的Windows集成開發程序,內嵌 GCC 編譯器(GCC 編譯器的 Windows 移植版,也就是MinGW),是 NOI、NOIP 等比賽的指定工具。Dev C++ 的優點是體積小(只有幾十兆)、安裝卸載方便、學習成本低,缺點是調試功能弱。
下載地址:
https://sourceforge.net/projects/orwelldevcpp/或
https://bloodshed-dev-c.en.softonic.com/
Dev C++ 下載完成后會得到一個安裝包(.exe 程序),雙擊該文件即可開始安裝。
3.2.4、C-Free
C-Free是一款集成開發環境(IDE),支持多種編譯器的專業化C/C++,使用者可以輕松地編輯、編譯、連接、運行、調試C/C++程序。Visual Studio的很龐大臃腫,而C-Free整個軟件才14M,非常輕巧,安裝簡單,可以自由切換編譯器。C-Free最新版本是5.0,注冊需要80RMB,可以免費試用30天,過期不注冊將無法使用。C-Free也提供了永久免費版,可以無限使用,版本號為4.0。
官方下載地址:
https://c-free.soft32.com/
C-Free可配置MinGW 2.95/3.x/4.x/5.0編譯器。
3.2.5、Keil
在基于Cortex-M或8051系列MCU的嵌入式開發中,許多優秀的IDE也都集成了交叉編譯工具,如源自德國Keil公司,開發幾個分別用于ARM系列、8051系列的集成IDE,內部集成了編譯器(ARMCC、Keil C),這些編譯器就是集成的交叉編譯器,就是在windows下編譯,生成的可執行程序在ARM或51內核執行。
官方下載地址:
https://www.keil.com/download/product/
3.2.6、IAR Embedded Workbench
總部在北歐的瑞典的IAR公司的集成開發環境IAR Embedded Workbench,也是專用于Cortex-M或8051系列MCU的嵌入式開發。IAR也是集成了IAR C/ C++編譯器。
官方下載地址:
https://www.iar.com/products/#/search
IAR工具有免費30天的試用期,如果自己學習使用,可以破解。
4、 Mac下的gcc編譯器
Mac OS X 10.4版本前,Mac也是采用gcc編譯器編譯Object-C,Mac OS X 10.5版本之后,LLVM-Clang編譯器開始逐漸替代GCC編譯器成為Mac的主要編譯器,因此,后續gcc等工具默認不再Mac OS X系統中安裝,而有時在MAC OS X下編譯開源軟件項目可能需要gcc編譯器,因此以下提供幾個常用的gcc安裝方法(總結于其它博主的安裝方法)。
4.1、命令行工具
命令行工具作為XCODE IDE的可選軟件包,也就是Command Line Tools,為mac終端用戶提供了許多常用的工具,如實用程序和編譯器,包括svn,git,make,GCC,clang,perl,size,strip,strings,libtool,cpp,what等,因此安裝了Command Line Tools,就包含了GCC編譯器軟件,有幾個方式安裝Command Line Tools。
4.1.1、通過XCODE安裝
安裝XCODE后,默認不安裝Command Line Tools,但是可以通過菜單可視化安裝命令行工具,如下圖所示:
4.1.2、通過Command Line Tools安裝包
XCODE軟件很大,有幾十G空間,因此可以選擇下載 Command Line Tools安裝包安裝,前提是有AppLE開發者賬號,登錄開發者網站下載xx.mpkg安裝包
https://developer.apple.com/cn/,
4.1.3、通過xcode-select –install命令安裝
命令xcode-select是一個在多個命令行工具目錄之間切換的實用程序,如下相關命令選項:
A、 xcode-select [-help] ;查看幫助
B、 xcode-select [-switch xcode_folder_path] ;切換xcode版本
C、 xcode-select [-print-path] ;查看當前版本xcode路徑
D、 xcode-select [-version] ;查看xcode版本
E、 xcode-select [–install] ;安裝xcode工具
通過xcode-select –install命令安裝方法如下:
4.2、通過brew包管理工具安裝
a、安裝包管理工具,terminal終端執行如下指令(國內安裝源),安裝home brew:
安裝完整版:
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
安裝簡化版:
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" speed
卸載腳本:
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/HomebrewUninstall.sh)"
安裝錯誤查詢地址:
https://gitee.com/cunkai/HomebrewCN/blob/master/error.md
b、執行指令brew install gcc安裝gcc。
c、執行gcc –v查看版本
發現gcc執行時映射到clang,因此后續調用gcc需要帶上版本號,如gcc-10 –v;編譯程序也一樣:gcc-10 main.cpp -o mainApp -lstdc++。
4.3、通過gcc安裝包安裝
a、到gcc托管網站sourceforge上下載所需的gcc版本,如下網站:
https://sourceforge.net/projects/hpc/files/hpc/gcc/;
b、打開terminal終端,進入gcc-9.2-bin.tar.gz壓縮包所在的目錄,然后執行解壓:
gunzip gcc-9.2-bin.tar.gz
sudo tar -xvf gcc-9.2-bin.tar
c、添加環境變量,打開配置文件touch ~/.bash_profile,添加PATH路徑:
d、激活配置:source ~/.bash_profile,然后gcc –version查看版本信息: