int main(int argc,char *argv[])
argc(argument count):參數的個數;
argv(argument value):參數值
argv[0] :檔案名稱
argv[1]:第一個參數,argv[2];第二個參數,以此類推。
編譯C
1 單來源程式到可執行程式
編譯 串連
源檔案(.c)--------->目標檔案(.o)------->可執行檔
hello.c -c howdy ./howdy
gcc -o:指定編譯器輸出的可執行程式名
-c:指示GCC去編譯原始碼,不再硬碟上留下目標檔案,跳過第二步
2 多源檔案到可執行檔
gcc -c src1.c src2.c ...
將n個源檔案建立各自的目標檔案
gcc scr1.c scr2.c ... -o scr
將N個程式編譯成一個目標檔案,並將他們串連到可執行程式src
3 預先處理
gcc -E:指示編譯器只進行預先處理操作
gcc -E hello.c -o hello.i 預先處理後的代碼放在不需要預先處理的.i 檔案中
4 產生組合語言
gcc -S :指實編譯器產生彙編代碼
5 建立靜態庫
靜態庫是一些.o檔案的幾何,他們是由編譯器按照通常的方式產生的,將程式串連到苦衷的目標檔案和將程式串連到目錄中的目標檔案是一樣的,靜態庫(archive)由ar管理這些靜態庫
構造一個庫,第一部是要編譯庫中的目標模組。
$gcc -c hellofirst.c hellosecond.c
建庫
$ar -r libhello.a hellofirst.o hellosecond.o
編譯並串連程式
$gcc twohellos.c libhello.a -o twohellos
執行
$./twohellos
6 建立共用庫(.so)
共用庫是目標檔案的幾何,對象模組的每個地址(變數應用和函數調用)都是相對位址,不是絕對位址。允許在運行程式的時候,動態加在和執行共用模組
1 編譯庫中的對象模組
gcc -c -fpic shellofirst.c shellosecond.c
fpic使得輸出的對象模組是按照可重定位方式產生
2 構造共用庫
gcc -shared shellofirst.o shellosecond.o -o hello.so
3 gcc stwohellos.c hello.so -o stwohellos
但是在執行時出現了:
./stwohellos
./stwohellos: error while loading shared libraries: hello.so: cannot open shared object file: No such file or directory
一開始我以為許可權不夠,可是 ls -l 顯示,許可權是足夠的。
針對這種情況這樣寫
gcc stwohellos.c ./hello.so -o stwohellos
這樣的話,就可以順利的運行了