命令列編譯的基本指令

來源:互聯網
上載者:User

標籤:

控制台下的編譯:

(實際蘋果用的clang,將gcc換成clang也是一樣的效果)

gcc [options] <inputs>

option常用的有

-o 連結

-c 將.c源檔案編譯成.o目標檔案,不進行連結

gcc helloworld.c -c

將產生helloworld.o

需進一步輸入

gcc helloworld.o -o helloworld

來產生最終的可執行檔helloworld。

gcc helloworld.c -c -o <隨便一個名字>

能自訂產生的目標檔案名稱 

 

-l(小寫L)後接xxxx 表示調用libxxxx.yy 庫

如果庫不在系統預設的目錄下要使用-L後接路徑 再接-lxxxxx

-I(大寫i)後接路徑,表示在此路徑下尋找標頭檔 xxxx.h

建立靜態連結庫:
ar -rcs libxxxx.a aaaa.o bbbb.o ccccc.o ...etc

r:如果目標檔案存在就重新整理它

c:建立後不顯示反饋資訊

s:在檔案開頭建立索引

 建立動態連結程式庫:

不同作業系統的動態連結程式庫尾碼不相同

Windows裡動態連結程式庫尾碼為 .dll(Dynamic Link Library)

Linux裡尾碼為 .so

Mac裡尾碼為 .dylib

建立:(產生的動態連結程式庫尾碼跟隨系統)

gcc -shared <FileName>.o livxxxx.dylib

使用:

和靜態庫一樣

 

使用 nm 指令查看庫

==================================

執行個體測試

~/Desktop/codeC 下有3個檔案 main.c test.c/.h

test檔案內有一函數print_hello,作用是列印"Hello World!"

main.c中include了test.h並調用了print_hello

先將test.c/.h製成動態連結程式庫:

gcc test.c -c //此操作在目前的目錄下產生test.ogcc -shared test.o -o libhello.dylib //此操作在目前的目錄下產生lib hello.dylib

連結並產生可執行檔

gcc main.c -c //產生main.ogcc main.o -L. -lhello -o helloworld //產生helloworld
./helloworld //控制台輸出helloworld字樣

 

現在更改一下連結的庫:

有一對test2.c/.h檔案,裡面也有一個print_hello函數,但作用是列印"How Are You"

用該檔案產生同樣名稱的動態連結程式庫:

gcc test2.c -c //產生test2.ogcc -shared test2.o -o libhello.dylib //重建了同名動態連結程式庫

 

然後直接運行原來的那個helloworld程式:

./helloworld

控制台輸出了"How Are You",而不是“Hello World"了,即使main函數的代碼沒有改變也沒有重新編譯。

命令列編譯的基本指令

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.