導航:首頁 > 源碼編譯 > gnu編譯m

gnu編譯m

發布時間:2022-08-03 22:55:41

㈠ GNU是個啥 是個標准,軟體還是編譯器還是一個總稱

GNU是一個自由軟體工程項目。下面的文字沒有具體解釋GNU是哪幾個單詞的所寫,但從整體上說明了GNU工程是怎麼回事,希望對你有幫助。
GNU工程已經開發了一個被稱為「GNU」(GNU是「不是UNIX」的縮寫)的、對Unix向上兼容的完整的自由軟體系統(free software system)。由Richard Stallman完成的最初的GNU工程的文檔被稱為『GNU宣言』,該宣言已經被翻譯成多種其它語言。我們還有創作與1983年的GNU工程創始宣言。
上述單詞「free」指的是自由(freedom),而不是價格。你可能需要或者不需要為獲取GNU軟體而支付費用。不論是否免費,一旦你得到了軟體,你在使用中就擁有三種特定的自由。首先是復製程序並且把它送給你的朋友或者同事的自由;而後是通過獲取完整的源代碼,按照你的意願修改程序的自由;最後是發布軟體的改進版並且有助於創建自由軟體社團的自由。(如果你重新發布 GNU軟體,你可能對分發拷貝這項體力勞動收費,也可能不收費。)

在1983年構思GNU工程是為了提供一種找回在計算機界早期的盛行的合作精神的方式--為了使合作成為可能而排除有私有軟體所有者給合作造成的障礙。

在1971年,當Richard Stallman開始他在MIT的職業生涯時,他工作於一個專門使用自由軟體的工作組。即使計算機公司也經常發布自由軟體。程序員可以自由地相互合作,就象他們通常所作的那樣。

到了80年代,幾乎所有的軟體都是私有的,這意味著它有一個不允許並且預防用戶合作的擁有者。這就使得GNU工程成為必要的了。

每個計算機的使用者都需要一個操作系統;如果沒有自由的操作系統,那麼如果你不求助於私有軟體,你甚至不能開始使用一台計算機。所以自由軟體議事日程的第一項就是自由的操作系統。

一個操作系統不僅僅是一個內核;它還包括編譯器、編輯器、文本排版程序,電子郵件軟體,和許多其他東西。因此,創作一個完整的操作系統是一鄉十分龐大的工作。它將耗費太多的年頭。

由於Unix的全局設計已經得到認證並且廣泛流傳,我們決定使操作系統與Unix兼容。同時這種兼容性使Unix的使用者可以容易地轉移到GNU上來。

自由的,類似於Unix的內核的初始目標已經達到了。到90年代,我們已經發現或者完成了除了內核之外的所有主要成分。而linux,一個自由的內核,由Linux Torvalds開發了。把Linux和幾乎完成的GNU 系統結合起來,就構成了一個完整的操作系統:一個基於Linux的GNU系統。估計目前大約有十萬人在使用基於Linux的GNU系統,包括Slackware、Debian、Red Hat以及其它。

㈡ gcc make和gnu make的區別,一般是用哪個

【名詞解釋】GNU("Gnu's Not Unix"的縮寫),一個類UNIX的操作系統,由GNU計劃推動,目標在於建立一個完全相容於UNIX的自由軟體環境。發展GNU系統的計劃,最早由理查德·斯托曼在1983年啟動,它是自由軟體基金會最早致力的目標。最近一個GNU系統版本,是於2011年4月1日釋出的GNU 0.401,採用GNU Hurd作為操作系統內核。其他的內核,最著名的是Linux kernel,也被應用在GNU系統中。

【編譯器歸類】根據需要,比如gcc與g++都gnu的編譯器。
gcc是c語言的編譯器;
g++是c++的編譯器。

㈢ 什麼是GCC編譯器

Linux系統下的Gcc(GNU C Compiler)是GNU推出的功能強大、性能優越的多平台編譯器,是GNU的代表作品之一。gcc是可以在多種硬體平台上編譯出可執行程序的超級編譯器,其執行效率與一般的編譯器相比平均效率要高20%~30%。
Gcc編譯器能將C、C++語言源程序、匯程式化序和目標程序編譯、連接成可執行文件,如果沒有給出可執行文件的名字,gcc將生成一個名為a.out的文件。在Linux系統中,可執行文件沒有統一的後綴,系統從文件的屬性來區分可執行文件和不可執行文件。而gcc則通過後綴來區別輸入文件的類別,下面我們來介紹gcc所遵循的部分約定規則。
.c為後綴的文件,C語言源代碼文件;
.a為後綴的文件,是由目標文件構成的檔案庫文件;
.C,.cc或.cxx 為後綴的文件,是C++源代碼文件;
.h為後綴的文件,是程序所包含的頭文件;
.i 為後綴的文件,是已經預處理過的C源代碼文件;
.ii為後綴的文件,是已經預處理過的C++源代碼文件;
.m為後綴的文件,是Objective-C源代碼文件;
.o為後綴的文件,是編譯後的目標文件;
.s為後綴的文件,是匯編語言源代碼文件;
.S為後綴的文件,是經過預編譯的匯編語言源代碼文件。
Gcc的執行過程
雖然我們稱Gcc是C語言的編譯器,但使用gcc由C語言源代碼文件生成可執行文件的過程不僅僅是編譯的過程,而是要經歷四個相互關聯的步驟∶預處理(也稱預編譯,Preprocessing)、編譯(Compilation)、匯編(Assembly)和連接(Linking)。
命令gcc首先調用cpp進行預處理,在預處理過程中,對源代碼文件中的文件包含(include)、預編譯語句(如宏定義define等)進行分析。接著調用cc1進行編譯,這個階段根據輸入文件生成以.o為後綴的目標文件。匯編過程是針對匯編語言的步驟,調用as進行工作,一般來講,.S為後綴的匯編語言源代碼文件和匯編、.s為後綴的匯編語言文件經過預編譯和匯編之後都生成以.o為後綴的目標文件。當所有的目標文件都生成之後,gcc就調用ld來完成最後的關鍵性工作,這個階段就是連接。在連接階段,所有的目標文件被安排在可執行程序中的恰當的位置,同時,該程序所調用到的庫函數也從各自所在的檔案庫中連到合適的地方。

Gcc的基本用法和選項
在使用Gcc編譯器的時候,我們必須給出一系列必要的調用參數和文件名稱。Gcc編譯器的調用參數大約有100多個,其中多數參數我們可能根本就用不到,這里只介紹其中最基本、最常用的參數。
Gcc最基本的用法是∶gcc [options] [filenames]
其中options就是編譯器所需要的參數,filenames給出相關的文件名稱。
-c,只編譯,不連接成為可執行文件,編譯器只是由輸入的.c等源代碼文件生成.o為後綴的目標文件,通常用於編譯不包含主程序的子程序文件。
-o output_filename,確定輸出文件的名稱為output_filename,同時這個名稱不能和源文件同名。如果不給出這個選項,gcc就給出預設的可執行文件a.out。
-g,產生符號調試工具(GNU的gdb)所必要的符號資訊,要想對源代碼進行調試,我們就必須加入這個選項。
-O,對程序進行優化編譯、連接,採用這個選項,整個源代碼會在編譯、連接過程中進行優化處理,這樣產生的可執行文件的執行效率可以提高,但是,編譯、連接的速度就相應地要慢一些。
-O2,比-O更好的優化編譯、連接,當然整個編譯、連接過程會更慢。
-Idirname,將dirname所指出的目錄加入到程序頭文件目錄列表中,是在預編譯過程中使用的參數。C程序中的頭文件包含兩種情況∶
A)#include
B)#include 「myinc.h」
其中,A類使用尖括弧(< >),B類使用雙引號(「 」)。對於A類,預處理程序cpp在系統預設包含文件目錄(如/usr/include)中搜尋相應的文件,而對於B類,cpp在當前目錄中搜尋頭文件,這個選項的作用是告訴cpp,如果在當前目錄中沒有找到需要的文件,就到指定的dirname目錄中去尋找。在程序設計中,如果我們需要的這種包含文件分別分布在不同的目錄中,就需要逐個使用-I選項給出搜索路徑。
-Ldirname,將dirname所指出的目錄加入到程序函數檔案庫文件的目錄列表中,是在連接過程中使用的參數。在預設狀態下,連接程序ld在系統的預設路徑中(如/usr/lib)尋找所需要的檔案庫文件,這個選項告訴連接程序,首先到-L指定的目錄中去尋找,然後到系統預設路徑中尋找,如果函數庫存放在多個目錄下,就需要依次使用這個選項,給出相應的存放目錄。
-lname,在連接時,裝載名字為「libname.a」的函數庫,該函數庫位於系統預設的目錄或者由-L選項確定的目錄下。例如,-lm表示連接名為「libm.a」的數學函數庫。
上面我們簡要介紹了gcc編譯器最常用的功能和主要參數選項,更為詳盡的資料可以參看Linux系統的聯機幫助。
假定我們有一個程序名為test.c的C語言源代碼文件,要生成一個可執行文件,最簡單的辦法就是∶
gcc test.c
這時,預編譯、編譯連接一次完成,生成一個系統預設的名為a.out的可執行文件,對於稍為復雜的情況,比如有多個源代碼文件、需要連接檔案庫或者有其他比較特別的要求,就要給定適當的調用選項參數。再看一個簡單的例子。
整個源代碼程序由兩個文件testmain.c 和testsub.c組成,程序中使用了系統提供的數學庫,同時希望給出的可執行文件為test,這時的編譯命令可以是∶
gcc testmain.c testsub.c □lm □o test
其中,-lm表示連接系統的數學庫libm.a。

Gcc的錯誤類型及對策
Gcc編譯器如果發現源程序中有錯誤,就無法繼續進行,也無法生成最終的可執行文件。為了便於修改,gcc給出錯誤資訊,我們必須對這些錯誤資訊逐個進行分析、處理,並修改相應的語言,才能保證源代碼的正確編譯連接。gcc給出的錯誤資訊一般可以分為四大類,下面我們分別討論其產生的原因和對策。

第一類∶C語法錯誤
錯誤資訊∶文件source.c中第n行有語法錯誤(syntex errror)。這種類型的錯誤,一般都是C語言的語法錯誤,應該仔細檢查源代碼文件中第n行及該行之前的程序,有時也需要對該文件所包含的頭文件進行檢查。有些情況下,一個很簡單的語法錯誤,gcc會給出一大堆錯誤,我們最主要的是要保持清醒的頭腦,不要被其嚇倒,必要的時候再參考一下C語言的基本教材。
第二類∶頭文件錯誤
錯誤資訊∶找不到頭文件head.h(Can not find include file head.h)。這類錯誤是源代碼文件中的包含頭文件有問題,可能的原因有頭文件名錯誤、指定的頭文件所在目錄名錯誤等,也可能是錯誤地使用了雙引號和尖括弧。

第三類∶檔案庫錯誤
錯誤資訊∶連接程序找不到所需的函數庫,例如∶
ld: -lm: No such file or directory
這類錯誤是與目標文件相連接的函數庫有錯誤,可能的原因是函數庫名錯誤、指定的函數庫所在目錄名稱錯誤等,檢查的方法是使用find命令在可能的目錄中尋找相應的函數庫名,確定檔案庫及目錄的名稱並修改程序中及編譯選項中的名稱。
第四類∶未定義符號
錯誤資訊∶有未定義的符號(Undefined symbol)。這類錯誤是在連接過程中出現的,可能有兩種原因∶一是使用者自己定義的函數或者全局變數所在源代碼文件,沒有被編譯、連接,或者乾脆還沒有定義,這需要使用者根據實際情況修改源程序,給出全局變數或者函數的定義體;二是未定義的符號是一個標準的庫函數,在源程序中使用了該庫函數,而連接過程中還沒有給定相應的函數庫的名稱,或者是該檔案庫的目錄名稱有問題,這時需要使用檔案庫維護命令ar檢查我們需要的庫函數到底位於哪一個函數庫中,確定之後,修改gcc連接選項中的-l和-L項。
排除編譯、連接過程中的錯誤,應該說這只是程序設計中最簡單、最基本的一個步驟,可以說只是開了個頭。這個過程中的錯誤,只是我們在使用C語言描述一個演算法中所產生的錯誤,是比較容易排除的。我們寫一個程序,到編譯、連接通過為止,應該說剛剛開始,程序在運行過程中所出現的問題,是演算法設計有問題,說得更玄點是對問題的認識和理解不夠,還需要更加深入地測試、調試和修改。一個程序,稍為復雜的程序,往往要經過多次的編譯、連接和測試、修改。下面我們學習的程序維護、調試工具和版本維護就是在程序調試、測試過程中使用的,用來解決調測階段所出現的問題。窗體頂端
窗體底端

㈣ GNU GCC是干什麼的,是不是開發環境,還是一種術語

都不是。GNU GCC是GNU開發的一個編譯器套件集(GNU不是公司名,而是一個有約40年歷史的軟體項目名)。GCC全稱GNU Compiler Collection,包括多種編程語言的編譯器。這些編譯器作為一個整體,被稱為GCC,它不是IDE(集成開發環境)。

毋庸置疑,GCC發展到今天這個樣子,是無數優秀的程序員共同的選擇,沒有IDE是因為GCC的使用者們不需要,而不是做不到。

㈤ gnu arm程序在Linux上怎麼去編譯,怎麼debug呢

交叉編譯(不依賴第三方庫)類似於 gcc hello.c,如下:
akae@akae:~$ /opt/usr/local/arm/4.4.1/bin/arm-linux-gcc hello.c
前面是路徑+arm-linux-gcc.

㈥ 如何使用GNU編譯器GCC來編譯Cortex-M3

MinGW是指只用自由軟體來生成純粹的Win32可執行文件的編譯環境,它是Minimalist GNU on Windows的略稱。

實際上 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)
源代碼版本控制工具可以讓世界上任何一個角落的人都可以參與到軟體項目中來。

2.下載MinGW
一種方法是到Sourceforge(http://sourceforge.net/project/showfiles.php?group_id=2435)下載一個MinGW-2.0.0-3.exe。

但是我配置的時候我電腦上安裝了codeblocks,已經自帶了MinGW。

3.環境變數的配置
在(系統屬性-->高級-->環境變數-->系統變數 中)(以下目錄都根據自己的電腦MinGW所在位置不同而改變)

a.在PATH的值中加入「C:\Program Files\MinGWStudio\MinGW\bin」。這是尋找gcc編譯器的路徑。如果PATH中還有其他內容,需要用英文狀態下分號進行分割

b.新建LIBRARY_PATH變數,在其值中加入「C:\Program Files\MinGWStudio\MinGW\lib」。這是標准庫存放的路徑。

c.新建C_INCLUDE_PATH變數,在其值中加入「C:\Program Files\MinGWStudio\MinGW\include」。這是Include查找頭文件的路徑。

4.驗證gcc是否正常運行
在cmd控制台窗口下面,輸入gcc -v。若已經成功安裝好,會顯示gcc的版本信息。

㈦ 內聯匯編的GNU 匯編程序簡述

Linux 中使用的基本匯編程序語法。GCC(用於 Linux 的 GNU C 編譯器)使用 AT&T 匯編語法。下面列出了這種語法的一些基本規則。 asm ( assembler template
: output operands (optional)
: input operands (optional)
: list of clobbered registers
(optional)
);
本例中,匯編程序模板由匯編指令組成。輸入操作數是充當指令輸入操作數使用的 C 表達式。輸出操作數是將對其執行匯編指令輸出的 C 表達式。
內聯匯編的重要性體現在它能夠靈活操作,而且可以使其輸出通過 C 變數顯示出來。因為它具有這種能力,所以 asm 可以用作匯編指令和包含它的 C 程序之間的介面。
一個非常基本但很重要的區別在於 簡單內聯匯編只包括指令,而 擴展內聯匯編包括操作數。要說明這一點,考慮以下示例: { int a=10, b; asm (movl %1, %%eax; movl %%eax, %0; :=r(b) /* output */ :r(a) /* input */ :%eax); /* clobbered register */}
在上例中,我們使用匯編指令使 b 的值等於 a。請注意以下幾點:
b 是輸出操作數,由 %0 引用,a 是輸入操作數,由 %1 引用。 r 是操作數的約束,它指定將變數 a 和 b 存儲在寄存器中。請注意,輸出操作數約束應該帶有一個約束修飾符 =,指定它是輸出操作數。 要在 asm 內使用寄存器 %eax,%eax 的前面應該再加一個 %,換句話說就是 %%eax,因為 asm 使用 %0、%1 等來標識變數。任何帶有一個 % 的數都看作是輸入/輸出操作數,而不認為是寄存器。 第三個冒號後的修飾寄存器 %eax 告訴將在 asm 中修改 GCC %eax 的值,這樣 GCC 就不使用該寄存器存儲任何其它的值。 movl %1, %%eax 將 a 的值移到 %eax 中, movl %%eax, %0 將 %eax 的內容移到 b 中。 因為 b 被指定成輸出操作數,因此當 asm 的執行完成後,它將反映出更新的值。換句話說,對 asm 內 b 所做的更改將在 asm 外反映出來。

㈧ windows怎麼安裝gnu c編譯器

Windows安裝GNU編譯器使用makefile
一、下載安裝MinGW

下載後,運行程序:mingw-get-inst-20120426.exe,選擇download latest repository catalogues. 選擇編譯器是勾選C Compiler 與C++ Compiler,點擊next進行下載及安裝。

二、設置環境變數
右擊計算機->屬性->高級系統設置->環境變數,在系統變數中找到PATH,將MinGW安裝目錄里的bin文件夾的地址添加到PATH裡面,(注意:PATH里兩個目錄之間以英文的;隔開)。打開MinGW的安裝目錄,打開bin文件夾,將mingw32-make.exe重命名為make.exe。

三、測試GCC編譯
創建一下test.c,用記事本打開該文件,將以下內容復制到文件中。

[cpp] view plain
#include<stdio.h>
#include<stdlib.h>
int main(void){
printf("Hello, world!\n");
system("pause");
return 0;
}

打開命令提示符,更改目錄到test.c的位置,鍵入
gcc -o test.exe test.c
可生成test.exe可執行文件。
四、測試makefile
新建文件夾,在文件夾內創建max_num.c、max.h、max.c、makefile四個文件。
max_num.c內容如下:

[cpp] view plain
#include <stdio.h>
#include <stdlib.h>
#include "max.h"

int main(void)
{
printf("The bigger one of 3 and 5 is %d\n", max(3, 5));
system("pause");
return 0;
}

max.h內容如下:

[cpp] view plain
int max(int a, int b);

max.c內容如下:

[cpp] view plain
#include "max.h"

int max(int a, int b)
{
return a > b ? a : b;
}

makefile內容如下:

[html] view plain
max_num.exe: max_num.o max.o
gcc -o max_num.exe max_num.o max.o

max_num.o: max_num.c max.h
gcc -c max_num.c

max.o: max.c max.h
gcc -c max.c

注意所有含有gcc的行前面是一個製表符,而非若干空格。否則可能會保存,無法編譯。

打開命令提示符,更改目錄到新建的文件夾,鍵入make,可生成指定的應運程序。
測試完成。

㈨ gnu編譯器是什麼意思

GCC(GNU Compiler Collection,GNU編譯器集合),是一套由 GNU 開發的編程語言編譯器。以及大部分UNIX系統的程序庫和工具。
GNU是「GNU's Not Unix」的遞歸縮寫。

閱讀全文

與gnu編譯m相關的資料

熱點內容
用什麼工具製作安卓應用 瀏覽:484
單片機數碼管的代碼 瀏覽:775
第一款安卓手機是什麼牌子 瀏覽:394
java非同步web 瀏覽:270
51單片機讀tf卡 瀏覽:936
linux下獲取文件 瀏覽:318
加密文件電腦顯示無屏幕截取許可權 瀏覽:352
虛榮安卓用什麼充值 瀏覽:750
阿里雲沒有伺服器如何備案 瀏覽:706
python用戶特性總結 瀏覽:730
華為門鑰匙加密卡怎麼辦 瀏覽:921
南京解壓車要帶什麼 瀏覽:567
天堂2編譯視頻教程 瀏覽:397
伺服器沒有進程怎麼辦 瀏覽:789
阿里雲發布新物種神龍雲伺服器 瀏覽:64
數據結構遞歸演算法統計二叉樹節點 瀏覽:672
ev3怎麼編程 瀏覽:706
gzip壓縮教程 瀏覽:353
解壓模擬例子 瀏覽:989
流媒體伺服器如何實現視頻轉發 瀏覽:62