市面上常見的 Linux 都是發(fā)行版本,,典型的 Linux 發(fā)行版包含了 Linux 內核,、桌面環(huán)境(例如 GNOME、KDE,、Unity 等)和各種常用的必備工具(例如 Shell,、GCC、VIM,、Firefox 等),,國內使用較多的是 CentOS、Ubuntu(烏班圖),、Debian,、Redhat 等。 Linux 主要應用于各種服務器(例如網(wǎng)站服務器,、數(shù)據(jù)庫服務器,、DNS服務器、郵件服務器,、路由器,、負載均衡集群等),而不是我們常見的個人電腦,。Linux 是服務器操作系統(tǒng)的絕對霸主,,占據(jù)了 80% 以上的份額,在未來的服務器領域,,Linux 是大勢所趨,。 這其中,又以 CentOS 和 Ubuntu 為主,,CentOS 占有壓倒性的優(yōu)勢,。服務器操作系統(tǒng) 80% 以上的市場份額被 Linux 占據(jù),而 Linux 80% 以上的份額又被 CentOS 占據(jù)。本教程以 CentOS 為例來講述如何編譯C程序,。 服務器上的 Linux 是不安裝圖形界面的,,只能在控制臺模式下使用,以盡量節(jié)省服務器資源,。而我們在學習過程中使用的 Linux 是帶圖形界面的,,以滿足初學者的需求,降低學習成本,。在 Linux 下我們仍然可以使用帶界面的,、傻瓜式的 IDE,例如 CodeLite,、CLion(收費),、Code::Blocks、Netbeans,、Eclipse CDT 等,。微軟的 Visual Studio 也支持 Linux 了,在 Windows 下用慣了 Visual Studio 的用戶也可以毫無障礙地遷移到 Linux 平臺,。 但是作為初學者,,我建議大家在命令行模式下編譯C語言程序,這樣能夠了解生成一個可執(zhí)行程序的詳細步驟,,以及編譯命令的各種設置選項,,為以后的 Linux C/C++ 開發(fā)打好堅實的基礎。 Gedit 編輯器在 Linux 下,,很多程序員都推崇使用 Vim,、Emacs 等命令行模式的編輯器,它們功能強大,,逼格夠高,,不管有沒有桌面環(huán)境都能使用,是 Linux C/C++ 程序員必備的神器,。但是 Vim 和 Emacs 并不容易上手,,使用者需要記憶很多命令和快捷鍵,熟練才能生巧,,所以需要一段時間的學習和適應,,這會增加初學者的學習成本,所以這里不推薦大家使用,。CentOS 下有一款自帶的圖形界面編輯器,,叫做 Gedit。Gedit 是一款簡單實用的文本編輯器,,界面優(yōu)雅,,支持語法高亮,比 Vim 容易上手,它和 Windows 下的編輯器沒有什么兩樣,。本教程將 Gedit 作為C語言代碼的編輯器,。 如果你使用的是其它的 Linux 發(fā)行版,可能沒有默認安裝 Gedit,,這個時候就得自己安裝,,具體步驟為:首先,在我們自己的用戶目錄下新建一個名為 demo 的文件夾,。這個文件夾專門用來存放與C語言相關的文件,,例如源文件、目標文件,、可執(zhí)行文件等,,它專供我們學習使用,。用戶目錄有時候也叫 home 文件夾或者主文件夾,,它的路徑是 接下來需要創(chuàng)建一個空白的 main.c 源文件,。main.c 其實就是一個純文本文件,并沒有任何特殊格式,,但是 Linux 不像 Windows,,可以在右鍵菜單中新建文本文檔,Linux 必須使用命令來創(chuàng)建,,如下所示:$ cd demo #進入 demo 目錄,,這是源文件所在的目錄 在 Gedit 中輸入下面的C語言代碼: 輸入完成后的效果如下圖所示: Ctrl+S 保存文件,,就完成了源代碼的編輯工作。此時需要關閉 Gedit 的窗口,,$ gedit main.c 命令才算執(zhí)行結束,,才能在控制臺繼續(xù)輸入其它命令。下圖演示了在控制臺上的實際效果:注意,,在 CentOS 下,,使用 touch 命令創(chuàng)建完 main.c 后,進入 demo 目錄,在右鍵菜單中也可以使用 Gedit 打開 main.c,,如下圖所示:GCC 編譯器Linux 下使用最廣泛的 C/C++ 編譯器是 GCC,,大多數(shù)的 Linux 發(fā)行版本都默認安裝,不管是開發(fā)人員還是初學者,,一般都將 GCC 作為 Linux 下首選的編譯工具,。本教程也毫不猶豫地使用 GCC 來編譯C語言程序。GCC 僅僅是一個編譯器,,沒有界面,,必須在命令行模式下使用。通過 gcc 命令就可以將源文件編譯成可執(zhí)行文件,。1) 生成可執(zhí)行程序最簡單的生成可執(zhí)行文件的寫法為:$ cd demo #進入源文件所在的目錄 注意:不像 Windows,,Linux 不以文件后綴來區(qū)分可執(zhí)行文件,,Linux 下的可執(zhí)行文件后綴理論上可以是任意的,這里的如果不想使用默認的文件名,,那么可以通過 -o 選項來自定義文件名,,例如:$ gcc main.c -o main.out 這樣生成的可執(zhí)行程序的名字就是main.out 。因為 Linux 下可執(zhí)行文件的后綴僅僅是一種形式上的,,所以可執(zhí)行文件也可以不帶后綴,,例如: $ gcc main.c -o main 這樣生成的可執(zhí)行程序的名字就是main 。通過 -o 選項也可以將可執(zhí)行文件輸出到其他目錄,,并不一定非得在當前目錄下,,例如:$ gcc main.c -o ./out/main.out 或者$ gcc main.c -o out/main.out 表示將可執(zhí)行文件輸出到當前目錄下的out 目錄,并命名為main.out ,。./ 表示當前目錄,,如果不寫,默認也是當前目錄,。注意:out 目錄必須存在,,如果不存在,gcc 命令不會自動創(chuàng)建,,而是拋出一個錯誤,。 2) 運行可執(zhí)行程序上面我們生成了可執(zhí)行程序,,那么該如何運行它呢?很簡單,,在控制臺中輸入程序的名字就可以,,如下所示:$ ./a.out ./ 表示當前目錄,整條命令的意思是運行當前目錄下的 a.out 程序,。如果不寫./ ,,Linux 會到系統(tǒng)路徑下查找 a.out,而系統(tǒng)路徑下顯然不存在這個程序,,所以會運行失敗,。所謂系統(tǒng)路徑,就是環(huán)境變量指定的路徑,,我們可以通過修改環(huán)境變量添加自己的路徑,,或者刪除某個路徑。很多時候,,一條 Linux 命令對應一個可執(zhí)行程序,,如果執(zhí)行命令時沒有指明路徑,那么就會到系統(tǒng)路徑下查找對應的程序,。輸入完上面的命令,,按下回車鍵,,程序就開始執(zhí)行了,,它會將輸出結果直接顯示在控制臺上,如下所示: $ cd demo $ ./out/main.out 或者$ out/main.out 這個時候加不加./ 都一樣,Linux 能夠識別出out 是一個目錄,,而不是一個命令,,它默認會在當前路徑下查找該目錄,而不是去系統(tǒng)路徑下查找,,所以不加./ 也不會出錯,。注意,如果程序沒有執(zhí)行權限,,可以使用 sudo 命令來增加權限,,例如:$ sudo chmod 777 a.out 完整的演示為了讓讀者有一個更加全面的認識,我們不妨將上面兩部分的內容連接起來,,完整的演示一下從編輯源文件到運行可執(zhí)行程序的全過程:$ cd demo #進入源文件所在目錄 分步驟編譯上面講解的是通過gcc 命令一次性完成編譯和鏈接的整個過程,,這樣最方便,大家在學習C語言的過程中一般都這么做,。實際上,,gcc 命令也可以將編譯和鏈接分開,,每次只完成一項任務。1) 編譯(Compile)將源文件編譯成目標文件需要使用-c 選項,,例如:gcc -c main.c 就將 main.c 編譯為 main.o,。打開 demo 目錄,就會看到 main.o:對于微軟編譯器(內嵌在 Visual C++ 或者 Visual Studio 中),,目標文件的后綴為.obj ,;對于 GCC 編譯器,目標文件的后綴為.o ,。一個源文件會生成一個目標文件,,多個源文件會生成多個目標文件,源文件數(shù)目和目標文件數(shù)目是一樣的,。通常情況下,,默認的目標文件名字和源文件名字是一樣的。 如果希望自定義目標文件的名字,,那么可以使用 -o 選項,,例如:gcc -c main.c -o a.o 這樣生成的目標文件的名字就是 a.o。2) 鏈接(Link)在gcc 命令后面緊跟目標文件的名字,,就可以將目標文件鏈接成為可執(zhí)行文件,,例如:gcc main.o 就將 main.o 鏈接為 a.out。打開 demo 目錄,,就會看到 a.out,。在 gcc 命令后面緊跟源文件名字或者目標文件名字都是可以的,gcc 命令能夠自動識別到底是源文件還是目標文件:如果是源文件,,那么要經(jīng)過編譯和鏈接兩個步驟才能生成可執(zhí)行文件,;如果是目標文件,只需要鏈接就可以了,。使用 -o 選項仍然能夠自定義可執(zhí)行文件的名字,,例如:gcc main.o -o main.out 這樣生成的可執(zhí)行文件的名字就是 main.out。下面是一個完整的演示: $ cd demo |
|
來自: 東耳果果 > 《電腦 機器人 太空》