日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

gcc编译器用法

發(fā)布時間:2024/9/5 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gcc编译器用法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一個用c語言寫的程序把他編譯成計算機可執(zhí)行的文件,一般有4個步驟

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

1,預(yù)處理:這個步驟,主要是包含頭文件,展開宏定義

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
確定可執(zhí)行文件的名稱為output_filename。如果不給出這個選項,gcc就給出預(yù)設(shè)的可執(zhí)行文件名a.out。

2. -c
只編譯,不鏈接成為可執(zhí)行文件,編譯器只是由輸入的.c等源文件生成.o為后綴的目標文件。

3. -g
產(chǎn)生調(diào)試工具(gdb)所必要的符號信息,要想對編譯出的程序進行調(diào)試,就必須加入這個選項。

4. -ldirname
將dirname所指出的目錄加入到程序頭文件目錄列表中。

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

6.?-Wall
生成所有警告信息。

?

gcc編譯多個模塊

helloworld.h

1 ============================================================== 2 * Copyright (C) 2018 . All rights reserved. 3 * 4 * 文件名稱:helloworld.h 5 * 創(chuàng) 建 者: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 * 創(chuàng) 建 者: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 * 創(chuàng) 建 者:ghostwu(吳華) * 描 述: * ================================================================*/#include "helloworld.h"int main(int argc, char *argv[]) {say_hello( "hello ghostwu" );return 0; }

編譯命令:

gcc helloworld.c main.c -o hello

?

打包靜態(tài)庫(就是一堆通用函數(shù)的集合,用.o文件打包):

1,首先生成.o文件

gcc -c helloworld.c -o helloworld.o

2,ar rcs libhello.a helloworld.o

r:替換? c:創(chuàng)建 s:保存

把helloworld打包成 libhello.a靜態(tài)庫

3,用靜態(tài)庫編譯 生成 可執(zhí)行文件

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

也可以使用l和L 選項

小寫的l: 指定庫文件名

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

gcc -Wall main.c -o main2 -lhello( 這種方式會報錯,在鏈接庫的時候,沒有用L指定路徑,默認情況下 不會在當(dāng)前目錄查找靜態(tài)庫 )

gcc -Wall -L. main.c -o main2 -lhello( L后面跟個. 代表當(dāng)前目錄下查找所鏈接的庫(libhello.so) ), -lhello: 省略lib和后綴(.so)

這個時候刪除靜態(tài)庫libhello.so,生成的main和main2文件,依然能執(zhí)行,因為靜態(tài)庫已經(jīng)被包含在可執(zhí)行文件中

?

轉(zhuǎn)載于:https://www.cnblogs.com/ghostwu/p/8213864.html

總結(jié)

以上是生活随笔為你收集整理的gcc编译器用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。