gcc編譯器用法,gcc編譯器

來源:互聯網
上載者:User

gcc編譯器用法,gcc編譯器

一個用c語言寫的程式把他編譯成電腦可執行檔檔案,一般有4個步驟

/*================================================================*   Copyright (C) 2018 . All rights reserved.*   *   檔案名稱:helloworld.c*   創 建 者:ghostwu(吳華)*   描    述:gcc編譯器用法示範*================================================================*/#include <stdio.h>#define HELLO "hello world!\n"int main(int argc, char *argv[]){    printf( HELLO );        return 0;}

1,預先處理:這個步驟,主要是包含標頭檔,展開宏定義

gcc -E helloworld.c -o helloworld.i

2,產生彙編代碼

gcc -S helloworld.i -o helloworld.s

3,編譯彙編

gcc -c helloworld.s -o helloworld.o

4,連結

gcc helloworld.o -o helloworld

通常寫完程式,我們用 gcc helloworld.c -o helloworld 直接完成以上四個步驟

 

gcc常用選項含義:

1. -o output_filename
確定可執行檔的名稱為output_filename。如果不給出這個選項,gcc就給出預設的可執行檔名a.out。

2. -c
只編譯,不連結成為可執行檔,編譯器只是由輸入的.c等源檔案產生.o為尾碼的目標檔案。

3. -g
產生調試工具(gdb)所必要的符號資訊,要想對編譯出的程式進行調試,就必須加入這個選項。

4. -ldirname
將dirname所指出的目錄加入到程式標頭檔目錄列表中。

5. -Ldirname
將dirname所指出的目錄加入到庫檔案的目錄列表中。

6. -Wall
產生所有警告資訊。

 

gcc編譯多個模組

helloworld.h

 1 ============================================================== 2 *   Copyright (C) 2018 . All rights reserved. 3 *    4 *   檔案名稱:helloworld.h 5 *   創 建 者:ghostwu(吳華) 6 *   描    述: 7 * 8 ================================================================*/ 9 10 #ifndef _HELLO_H_11 #define _HELLO_H_12 void say_hello( const char* name );13 #endif

helloworld.c

/*================================================================*   Copyright (C) 2018 . All rights reserved.*   *   檔案名稱:helloworld.c*   創 建 者:ghostwu(吳華)*================================================================*/#include <stdio.h>#include "helloworld.h"void say_hello( const char* name ) {    printf( "%s\n", name );}

main.c

/*================================================================*   Copyright (C) 2018 . All rights reserved.*   *   檔案名稱:main.c*   創 建 者:ghostwu(吳華)*   描    述:*================================================================*/#include "helloworld.h"int main(int argc, char *argv[]){    say_hello( "hello ghostwu" );    return 0;}

編譯命令:

gcc helloworld.c main.c -o hello

 

打包靜態庫(就是一堆通用函數的集合,用.o檔案打包):

1,首先產生.o檔案

gcc -c helloworld.c -o helloworld.o

2,ar rcs libhello.a helloworld.o

r:替換  c:建立 s:儲存

把helloworld打包成 libhello.a靜態庫

3,用靜態庫編譯 產生 可執行檔

gcc -Wall main.c libhello.a -o main

也可以使用l和L 選項

小寫l: 指定庫檔案名稱

大寫的L: 指定庫所在的路徑

gcc -Wall main.c -o main2 -lhello( 這種方式會報錯,在連結庫的時候,沒有用L指定路徑,預設情況下 不會在目前的目錄尋找靜態庫 )

gcc -Wall -L. main.c -o main2 -lhello( L後面跟個. 代表目前的目錄下尋找所連結的庫(libhello.so) ), -lhello: 省略lib和尾碼(.so)

這個時候刪除靜態庫libhello.so,產生的main和main2檔案,依然能執行,因為靜態庫已經被包含在可執行檔中

 

聯繫我們

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