gcc教程(windows版本)

1. GCC安裝

1.1 什麼是 GCC

GCC 是 GNU 編譯器套裝的簡稱(GNU Compiler Collection),一套編程語言編譯器,以 GPL 及 LGPL 許可證所發行的自由軟件,也是 GNU 項目的關鍵部分,也是 GNU 工具鏈的主要組成部分之一。GCC(特別是其中的 C 語言編譯器)也常被認爲是跨平臺編譯器的事實標準。
知乎:Cygwin 和MinGW 的區別與聯繫是怎樣的?

1.2 安裝 MinGw

1.2.1. 下載 MinGW

注意!安裝mingw必須搭配msys(如果安裝cygwin,則不需要),推薦mingw64+msys1

mingw(32位)

http://sourceforge.net/projects/mingw/files/latest/download?source=files

mingw(64位)

http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/installer/mingw-w64-install.exe/download

1.2.2. 安裝

下載完畢後,我們會得到一個 mingw-get-setup.exe 名字的安裝包,雙擊打開即可安裝。
在這裏插入圖片描述
安裝目錄可以自己選擇,完後選擇 Continue 按鈕安裝,安裝完後會在桌面得到一個 MinGW Installer 的可執行程序,如圖所示:
在這裏插入圖片描述
按照上圖選擇勾選這四項,完後選擇 Installation --> Apply changes,如圖所示:
在這裏插入圖片描述
完後選擇 Apply 按鈕即可安裝。

1.2.3. 64位配置圖

在這裏插入圖片描述

mingw64配置圖詳解

有5個選項

  • Version(gcc版本),選擇最高的

  • Architecture(架構),32位cpu選擇i686,64位cpu選擇x86_64

  • Threads(線程模式),如果使用posix api 選擇posix,如果使用win32 api 選擇win32

  • Exception(異常處理機制,有三種)

    1. SJLJ (setjmp/longjmp)
      優點,兼容性好,32位或64位架構都可以使用
      缺點,速度較慢

    2. DWARF (DW2, dwarf-2)
      優點,速度比SJLJ快
      缺點,只能用於32位架構,且有bug!(儘量別用!!!)

    3. SEH (zero overhead exception)
      優點,速度快
      缺點,只能用於64位架構

  • Build revision(編譯版本),選擇最高的

2. 安裝MSYS(運行在windows上的小型linux環境)

2.1 下載msys1

下載地址: http://sourceforge.net/projects/mingwbuilds/files/external-binary-packages/ (第三方)
在這裏插入圖片描述
在該下載頁面中,應該下載的是下圖中README.txt下面的壓縮包文件,而非‘Download mingw-builds-install.exe’。

http://downloads.sourceforge.net/mingw/MSYS-1.0.11.exe(官方)

3. 配置mingw+msys環境變量

方法1:配置系統環境變量PATH

我的電腦->屬性->高級系統設置->環境變量->系統變量->Path->編輯->變量值
如果是mingw+msys,則把mingw的bin目錄,msys的bin目錄加入環境變量,用分號隔開

方法2:

接下來便是環境變量的配置,找到 MinGW 的安裝目錄,進入 C:\MinGW\msys\1.0 路徑,有一個 msys.bat 文件,它就是我們運行 GCC 的 bat 文件,右鍵發送到桌面快捷方式,方便以後打開,雙擊打開,完後 輸入 gcc,會提醒我們查找不到這個命令。

出現上面情況的原因是沒有配置環境變量,進入 C:\MinGW\msys\1.0\etc,有一個 profile 的文件,使用記事本編輯打開,在末尾追加一句:
export PATH=/c/MinGWbin:$PATH

這裏的路徑就是 MinGW 的安裝路徑。完後重新打開 msys.bat,輸入 gcc,已經成功配置環境變量:
在這裏插入圖片描述
完後可以創建一個簡單的 C 程序測試一下:

4. MinGW 和 Cygwin 的具體區別

在上安裝 MinGW 和 Cygwin 時我們運行同一個測試程序,分別生成了 test.exe 和 a.exe 兩個可執行程序,那麼它們具體有什麼區別呢,我們在 Windows 系統自帶的控制檯中分別來運行它們。
在這裏插入圖片描述
當我們運行 MinGW 編譯生成的 test.exe 時,控制檯成功輸出了 test mingw,然而當我們運行 Cygwin 編譯生成的 a.exe 時,卻出現了上圖所示的錯誤,這是什麼原因呢?(我也很懵逼0.0)
原來,我們的計算機查找不到 cygwin1.dll 這個庫,這個庫是 Cygwin 用來模擬 Linux 環境的一個庫,它可以把 Linux 的 API 映射帶 Windows 下來執行 Windows 程序,如果我們想要執行它,只需要將 Cygwin 的目錄添加到環境變量即可。我們將 Cygwin 的目錄添加到 PATH 環境變量即可。

作者:Barry_1
鏈接:https://www.jianshu.com/p/b940cc575e57
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯繫作者獲得授權並註明出處。

5. G++命令簡介

5.1 編譯簡單的 C 程序

C 語言經典的入門例子是 Hello World,下面是一示例代碼:

#include <stdio.h>
int main(void)
{
printf(“Hello, world!n”);
return 0;
}

我們假定該代碼存爲文件‘hello.c’。要用 gcc 編譯該文件,使用下面的命令:

$ gcc -g -Wall hello.c -o hello

該命令將文件‘hello.c’中的代碼編譯爲機器碼並存儲在可執行文件 ‘hello’中。機器碼的文件名是通過 -o 選項指定的。該選項通常作爲命令行中的最後一個參數。如果被省略,輸出文件默認爲 ‘a.out’。

注意到如果當前目錄中與可執行文件重名的文件已經存在,它將被覆蓋。

  • 選項 -Wall
    開啓編譯器幾乎所有常用的警告──強烈建議你始終使用該選項。編譯器有很多其他的警告選項,但 -Wall 是最常用的。默認情況下GCC 不會產生任何警告信息。當編寫 C 或 C++ 程序時編譯器警告非常有助於檢測程序存在的問題。 注意如果有用到math.h庫等非gcc默認調用的標準庫,請使用-lm參數

本例中,編譯器使用了 -Wall 選項而沒產生任何警告,因爲示例程序是完全合法的。

  • 選項 “”-g”"
  • 表示在生成的目標文件中帶調試信息,調試信息可以在程序異常中止產生core後,幫助分析錯誤產生的源頭,包括產生錯誤的文件名和行號等非常多有用的信息。

要運行該程序,輸入可執行文件的路徑如下:

$ ./hello
Hello, world!

這將可執行文件載入內存,並使 CPU 開始執行其包含的指令。 路徑 ./ 指代當前目錄,因此 ./hello 載入並執行當前目錄下的可執行文件 ‘hello’。

  • 捕捉錯誤
    如上所述,當用 C 或 C++ 編程時,編譯器警告是非常重要的助手。爲了說明這一點,下面的例子包含一個微妙的錯誤:爲一個整數值錯誤地指定了一浮點數控制符‘%f’。
#include <stdio.h>
int main (void)
{
	printf (“Two plus two is %fn”, 4);
	return 0;
}

一眼看去該錯誤並不明顯,但是它可被編譯器捕捉到,只要啓用了警告選項 -Wall。

編譯上面的程序‘bad.c’,將得到如下的消息:

$ gcc -Wall -o bad bad.c
main.c: 在函數‘main’中:
main.c:5: 警告: 格式‘%f’需要類型‘double’,但實參 2 的類型爲‘int’

這表明文件 ‘bad.c’第 6 行中的格式字符串用法不正確。GCC 的消息總是具有下面的格式 文件名:行號:消息。編譯器對錯誤與警告區別對待,前者將阻止編譯,後者表明可能存在的問題但並不阻止程序編譯。

本例中,對整數值來說,正確的格式控制符應該是 %d。

如果不啓用 -Wall,程序表面看起來編譯正常,但是會產生不正確的結果:

$ gcc bad.c -o bad
$ ./bad
Two plus two is 0.000000

顯而易見,開發程序時不檢查警告是非常危險的。如果有函數使用不當,將可能導致程序崩潰或產生錯誤的結果。開啓編譯器警告選項 -Wall 可捕捉 C 編程時的多數常見錯誤。

編譯多個源文件
一個源程序可以分成幾個文件。這樣便於編輯與理解,尤其是程序非常大的時候。這也使各部分獨立編譯成爲可能。

下面的例子中我們將程序 Hello World 分割成 3 個文件:‘hello.c’,‘hello_fn.c’和頭文件‘hello.h’。這是主程序‘hello.c’:

#include “hello.h”
int main(void)
{
	hello (“world”);
	return 0;
}

在先前例子的‘hello.c’中,我們調用的是庫函數 printf,本例中我們用一個定義在文件‘hello_fn.c’中的函數 hello 取代它。

主程序中包含有頭文件‘hello.h’,該頭文件包含函數 hello 的聲明。我們不需要在‘hello.c’文件中包含系統頭文件‘stdio.h’來聲明函數 printf,因爲‘hello.c’沒有直接調用 printf。

文件‘hello.h’中的聲明只用了一行就指定了函數 hello 的原型。

void hello (const char * name);

函數 hello 的定義在文件‘hello_fn.c’中:

#include <stdio.h>
#include “hello.h”

void hello (const char * name)
{
	printf (“Hello, %s!n”, name);
}

語句 #include “FILE.h” 與 #include <FILE.h> 有所不同:前者在搜索系統頭文件目錄之前將先在當前目錄中搜索文件‘FILE.h’,後者只搜索系統頭文件而不查看當前目錄。

要用gcc編譯以上源文件,使用下面的命令:

$ gcc -Wall hello.c hello_fn.c -o newhello

本例中,我們使用選項 -o 爲可執行文件指定了一個不同的名字 newhello。注意到頭文件‘hello.h’並未在命令行中指定。源文件中的的 #include “hello.h” 指示符使得編譯器自動將其包含到合適的位置。

要運行本程序,輸入可執行文件的路徑名:

$ ./newhello
Hello, world!

源程序各部分被編譯爲單一的可執行文件,它與我們先前的例子產生的結果相同。

6. Makefile經典教程(一個很棒很清晰的講解)

2017年04月17日 21:24:21 Seven_Amber 閱讀數:22643
該篇文章爲轉載,是對原作者系列文章的總彙加上標註。

支持原創,請移步陳浩大神博客:(最原始版本)

http://blog.csdn.net/haoel/article/details/2886

轉自一個博主 基於原博客的整理版本:

http://blog.csdn.net/ruglcc/article/details/7814546/

我轉自:https://blog.csdn.net/Seven_Amber/article/details/70216216

另一種:Win7 64位中MinGW和MSYS的安裝

背景:

A. 由於需要在Win7 64位系統下使用Visual Studio,並調用OpenBlas庫,所以需要gcc在windows下編譯該庫。

B. MinGW集成了衆多的編譯器,因此想通過安裝MinGW來使用gcc。同時,需要通過MSYS使用與編譯相關的命令行。因此,需要同時安裝MinGW和 MSYS。

C. 通常,網上能找到的MinGW安裝包中(http://www.mingw.org)都已經附帶了MSYS組件,且提供了GUI界面,因此安裝較爲容易,可參考本人博文 (Windows 中OpenBlas 的安裝 - Windows 32bit 適用 )。然而,針對MinGW,這些安裝包中的編譯器往往只適用於Win32, 而不適用於Win64。

D. 因此,若要在Win7 64位中使用MinGW,就需要特別安裝 MinGW-w64。

E. MinGW和MSYS是兩個可獨立使用的組件。MinGW對操作系統敏感。

安裝:

安裝前請先務必卸載其他版本的MinGW。

  1. 首先安裝MinGW-w64。

========== 安裝方法 A ==========

下載地址:http://sourceforge.net/projects/mingw-w64/?source=recommended

而後啓動該 .exe文件,開始安裝。安裝開始時,需要注意設置爲如下圖所示。安裝目錄設爲 C:\MinGW,這個目錄是MinGW推薦的。由於是在線下載、安裝,所以耗時大概爲30分鐘。

安裝完成後,需要將路徑 C:\MinGW\mingw64\bin 添加到PATH環境變量中。此時啓動cmd窗口,輸入 gcc -v,則可以查看到gcc編譯器的版本信息。

備註:

A. 不同於以往的MinGW安裝包,該MinGW-w64只包含了MinGW編譯器本身,而不包含MSYS等組件,因此在後續並不會彈出Windows 中OpenBlas 的安裝 - Windows 32bit 適用 中所示的組件選擇安裝界面。MinGW-w64只是單純的編譯器安裝包,這也是爲什麼本文中需要單獨安裝MSYS的原因。

B. 由於後續MSYS可能調用make命令,而MinGW系列只提供了名字爲 mingw32-make.exe 的執行文件(C:\MinGW\mingw64\bin 路徑下),事實上,該.exe 和make.exe 功能一樣,爲了make執行時能找到該文件,建議複製 mingw32-make.exe 一份,並將複製文件命名爲’make.exe’。

========== 安裝方法 B ==========

方法A需要在線下載、安裝,因此對網絡有要求(我第二次用A方法安裝MinGW遇到的問題就是:可以瀏覽網頁並下載mingw-w64-install.exe,但後續的在線安裝就出問題: Cannot download repository.txt [0],具體原因沒有找到,只怪學校的網絡管得太…)。通過如下鏈接:

http://sourceforge.net/p/mingw-w64/mailman/message/32967954/

直接下載合適配置的、已編譯的MinGW64文件庫,放到C:\MinGW目錄下,並同方法A一樣進行後續處理。具體下載哪個版本,可以參考方法A中的setting,或者結合自己的需求。

  1. 安裝 MSYS。

下載地址: http://sourceforge.net/projects/mingwbuilds/files/external-binary-packages/

在該下載頁面中,應該下載的是下圖中README.txt下面的壓縮包文件,而非‘Download mingw-builds-install.exe’。

下載後,解壓縮,可看到文件內有msys文件夾,將msys文件夾整體移動到路徑 C:\MinGW 下。在msys文件夾內,會看到 msys.bat 文件,雙擊則啓動MSYS,在MSYS中則可使用UNIX下的命令行,如make。

備註:

A. 在MSYS中,可用 ‘where make’ 來查看可供調用的 make.exe 位置。

我的一個小疑惑,如前面所寫,MinGW內存在make.exe,而MSYS內也存在make.exe(C:\MinGW\msys\bin),那麼當在MSYS內輸入make命令時,調用的到底是那個make.exe? 希望路過的知道答案的能指點一下。

作者:Life_XY
來源:CSDN
原文:https://blog.csdn.net/yangyangyang20092010/article/details/46350519
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章