C編譯基礎

來源:互聯網
上載者:User

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
這樣的話,就可以順利的運行了

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.