在windows下使用GNU工具-gcc編譯器

來源:互聯網
上載者:User

標籤:開頭   產生   編譯   api   mini   告訴   軟體   運行速度   gawk   

2018-01-12  19:10:42

在windows下使用GNU編譯器-gcc編譯器

 

1、MinGW(Minimalist GNU on Windows)編譯工具介紹

  MinGW是指只用自由軟體來產生純粹的Win32可執行檔的編譯環境,它是Minimalist(簡化) GNU on Windows的略稱。

unix-like系統上的gcc的windows移植版本:MinGW編譯系統/工具

實際上 MinGW 並不是一個 單純的C/C++ 編譯器,而是一套 GNU 工具集合。除開 GCC 以外,MinGW 還包含有一些其他的 GNU 程式開發工具 (比如 gawk bison 等等)。開發 MinGW 是為了那些不喜歡工作在 Linux(FreeBSD) 作業系統而留在 Windows 的人提供一套符合 GNU 的 GNU 工作環境。所以,使用 MinGW 我們就可以像在 Linux 下一樣使用 GNU 程式開發工具。

  GCC 就是 MinGW 的核心所在,GCC 是一套支援眾多電腦程式語言的編譯系統,而且在語言標準的實現上是最接近於標準的。並且 GCC 幾乎可以移植到目前所有可用的電腦平台。(我的電腦上就還裝有 DevKitPro,裡麵包含 GCC 的 ARM(for GBA/DS/GP32) 和 MIPS(for PSP) 版本。)

  GCC 本身不像 VC 那樣擁有IDE 介面(在 Windows 上也存在 Dev C++ 之類的支援 MinGW 編譯器的 IDE)。原始碼編輯你可以選用任何你喜歡的文字編輯器(據說微軟的開發人員包括 VC 的開發都不用 VC 所帶的 IDE 編輯器,而是選用 GNU 的 VIM 編輯器)。然後使用 make 等工具來進行軟體項目的編譯、連結、打包乃至發布。而像 cvs(svn) 原始碼版本控制工具可以讓世界上任何一個角落的人都可以參與到軟體項目中來。

  文字編輯器產生源檔案+gcc編譯系統編譯(產生可執行檔??)

2、MinGW主要檔案

  gcc-core C語言編譯器 
  gcc-c++ C++語言編譯器 
  mingw-runtime MinGW的執行階段程式庫(這個必須安裝) 
  win32api win32的API函數標頭檔和串連庫 
  binutils MinGW的彙編器和連接器等基礎工具 
  gdb MinGW中的調試工具 
  mingw32-make Make工具,用以更好的管理你的項目 

 

3、gcc常見命令

 

gcc -v           //查看gcc的版本資訊gcc -o test   test.c    //執行test.c,產生檔案命名為test,若省略則預設為agcc -E           //預先處理              //-g 可執行程式包含調試資訊              // -o output_filename,確定輸出檔案的名稱為output_filename                            //-c 只編譯不連結                         //-c 產生.o檔案,就是obj檔案,不產生執行檔案 

 

$:表示程式所在目錄,比如:F:\MinGW>

3. 1、執行如下命令:

$ gcc -o hello hello.c
運行如下 : $ hello
輸出: Hello,world!

3.2、我們也可以分步編譯如下:

分步暫時省略,太懶了,看上面的代碼

3.3、我們可以把幾個檔案一同編譯產生同一個可執行檔。

比如:一個工程有main.c、 foo.c 、def.c產生foo的可執行檔。
編譯命令如下:

$ gcc –c main.c foo.c def.c –o foo//或者:$ gcc –o foo main.c foo.c def.c

 

4、庫依賴(庫依賴windows下應該是和linux下一樣的)

函數庫是一些標頭檔(.h)和庫檔案(.so或者.a)的集合。Linux下的大多數函數都預設將標頭檔放到/usr/include/目錄下,而庫檔案則放到/usr/lib/目錄下,但並非絕對如此。因此GCC設有添加標頭檔和庫檔案的編譯選項開關。
1. 添加標頭檔:-I
例如在/home/work/include/目錄下有編譯foo.c所需標頭檔def.h,為了讓GCC能找到它們,就需要使用-I選項:

$ gcc foo.c -I /home/work/include/def.h -o foo

2. 添加庫檔案:-L
例如在/home/work/lib/目錄下有連結所需庫檔案libdef.so,為了讓GCC能找到它們,就需要使用-L選項:

$ gcc foo.c –L /home/work/lib –ldef.a –o foo

說明:-l選項指示GCC去串連庫檔案libdef.so。Linux下的庫檔案命名有一個約定,即庫檔案以lib三個字母開頭,因為所有的庫檔案都遵循這個約定,故在用-l選項指定連結的庫檔案名稱時可以省去lib三個字母。
[題外語] 
Linux下的庫檔案分為動態連結程式庫(.so檔案)和靜態連結庫(.a檔案)。GCC預設為動態庫優先,若想在動態庫和靜態庫同時存在的時候連結靜態庫需要指明為-static選項。比如上例中如還有一個libdef.a而你想連結libdef.a時候命令如下:

$ gcc foo.c –L /home/work/lib –static –ldef.a –o foo
5、代碼最佳化

GCC提供不同程度的代碼最佳化功能。開關選項是:-On,n取值為0到3。預設為1。-O0表示沒有最佳化,而-O3是最高最佳化。最佳化層級越高代碼運行越快,但並不是所有代碼都能夠載入最高最佳化,而應該視具體情況而定。但一般都使用-O2選項,因為它在最佳化長度、編譯時間和代碼大小之間,取得了一個比較理想的平衡點。
以下這段是我摘自別人文章的,說的比較詳細:
編譯時間使用選項-O可以告訴GCC同時減小代碼的長度和執行時間,其效果等價於-O1。在這一層級上能夠進行的最佳化類型雖然取決於目標處理器,但一般都會包括線程跳轉(Thread Jump)和延遲退棧(Deferred Stack Pops)兩種最佳化。選項-O2告訴GCC除了完成所有-O1層級的最佳化之外,同時還要進行一些額外的調整工作,如處理器指令調度等。選項-O3則除了完成所有-O2層級的最佳化之外,還包括迴圈展開和其它一些與處理器特性相關的最佳化工作。通常來說,數字越大最佳化的等級越高,同時也就意味著程式的運行速度越快。
下面通過具體執行個體來感受一下GCC的代碼最佳化功能,所用程式如清單3所示。

 

6、15個常用的gcc命令

http://blog.csdn.net/typename/article/details/8170213

在windows下使用GNU工具-gcc編譯器

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.