歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux下GCC編譯C源程序

Linux下GCC編譯C源程序

日期:2017/3/1 10:28:53   编辑:Linux編程

$ cat hello1.c

如果已經有hello1.c則將hello1.c的文件內容顯示在屏幕上,否則給出提示沒有此文件。

$ cat 單獨輸入cat會將後面所有的按鍵輸出到屏幕上面,退出cat按Ctrl+C鍵。

$vi hello1.c 進入VIM,沒有hello1.c則創建此文件。

按dd刪除光標所在行,按x刪除光標所在字符$光標定位到行尾,d$刪除光標所在字符到行尾所有字符按i進入插入模式,a進入附加模式,

hello1.c中輸入

  1. #include <stdio.h>
  2. main()
  3. {
  4. int r;
  5. printf("Enter an integer,please!\n");
  6. scanf("%d",&r);
  1. square(r);
  2. return 0;
  3. }
輸入gcc hello1.c會提示沒有定義square.,所以不帶gcc的選項進行編譯是不行的。ESC進入VI命令模式
  1. #include <stdio.h>
  2. int square(int x)
  3. {
  4. printf("The square=%d\n",x*x);
  5. return (x*x);
  6. }
分別編譯hello1.c 和hello2.c

$gcc -c hello1.c

$gcc -c hello2.c

$gcc hello1.o hello2.o -o hello

$./hello.out

如果在終端shell下直接輸入$hello,會提示沒有此命令,因為此時shell以為你輸入的是shell命令,而hello並不是shell的命令,而是你自己寫的程序。

要想執行自己寫的程序,有兩種辦法,一是cd到程序所在的目錄,執行:. /hello,,另一種就是:(路徑名)/hello。

gcc的 -c格式只生成目標文件,不進行連接,用於對原文件的分別編譯,生成.o目標文件。

gcc的 -o file選項格式將輸出放在文件file中。如果未使用該項,則可執行文件放在a.out中。


如果hello1.c中有

#include “hello3.h”

而hello3.h又不在當前目錄和標准目錄中,比如在/tmp下,則可以如下編譯

$gcc -I /tmp hello1.c

假如hello1.c中使用了某宏比如MAC而並沒有定義該宏,鍵入要#define MAC “test”可以如下編譯

$gcc -I /tmp -D MAC=' "test" " -E hello1.c

-D name 定義一個宏,其值為1

-D name=definition定義一個宏name,指定值為definition,作用等價於在源文件中#define name definition,但-D選項比宏定義優先級高。

-I dir 指定搜索頭文件的路徑dir。

-E 只對指定的源文件進行預處理,不做編譯,生成的結果送到標准輸出。

gcc優化程序常用選項 選項格式 功能 -O
-O1 試圖減少代碼大小和執行時間,但並不執行需要花費大量編譯時間的任何優化 -O2 在-O1級別的優化之上,還進行一些額外調整工作——除不做循環展開、函數內聯、和寄存器重新命名外,幾乎進行所有可選優化 -O3 除了完成所有-O2級別的優化之外,還進行包括循環展開和其他一些與處理器特性相關的優化工作 -O0 不執行優化 -Os 具有-O2級別的優化,同時並不特別增加代碼大小

Copyright © Linux教程網 All Rights Reserved