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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux C文件编译

發(fā)布時間:2025/3/12 linux 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux C文件编译 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

設(shè)置編輯器

1.TAB鍵設(shè)置為4空格。

首先用vim打開/etc/vim/vimrc文件,這里面發(fā)現(xiàn)root用戶才能修改vimrc文件,所以用sudo命令暫時切換到root用戶。

在vimrc文件最后面,輸入set ts =4完成設(shè)置。

然后保存,關(guān)閉文件。

2.VIM編輯器顯示行號。

在上面的文件最后一行加入set nu即可。

編寫代碼

編譯代碼

Ubuntu下,C語言編譯器是GCC。

使用gcc -v查看GCC編譯器版本號。

可知,本機(jī)GCC編譯器版本為5.4.0。

Ubuntu自帶的GCC編譯器針對X86架構(gòu),只能編譯在X86架構(gòu)CPU上運(yùn)行的程序。

編譯在ARM上運(yùn)行的程序,需要ARM的GCC編譯器。

gcc main.c,編譯main.c文件。編譯完成以后,生成一個a.out文件,這就是編譯生成的可執(zhí)行文件。使用./a.out,運(yùn)行可執(zhí)行文件。

a.out文件的命名,是GCC編譯器自動命名的。使用gcc命令時,加上-o,可以指定生成的可執(zhí)行文件名字。

GCC編譯器

gcc命令格式:

gcc [選項(xiàng)] [文件名字]

選項(xiàng):

-c:只編譯不鏈接為可執(zhí)行文件,編譯器將輸入的.c 文件編譯為.o 的目標(biāo)文件。

-o:<輸出文件名>指定編譯結(jié)束以后的輸出文件名,如果不使用這個選項(xiàng),GCC默認(rèn)編譯出來的可執(zhí)行文件名字為 a.out。

-g:添加調(diào)試信息,如果要使用調(diào)試工具(如GDB)的話就必須加入此選項(xiàng),此選項(xiàng)指示編譯的時候生成調(diào)試所需的符號信息。

-O:對程序進(jìn)行優(yōu)化編譯,如果使用此選項(xiàng)的話整個源代碼在編譯、鏈接的的時候都會進(jìn)行優(yōu)化,這樣產(chǎn)生的可執(zhí)行文件執(zhí)行效率就高。

-O2:比-O 更幅度更大的優(yōu)化,生成的可執(zhí)行效率更高,但是整個編譯過程會很慢。

GCC編譯器,能夠檢測出錯誤類型,標(biāo)記錯誤發(fā)生在哪個文件、哪一行。

GCC編譯器編譯流程:預(yù)處理、編譯、匯編、鏈接。

預(yù)處理:展開所有頭文件,替換程序中的宏、解析條件編譯,并添加到文件中。

編譯:將經(jīng)過預(yù)處理的代碼編譯成匯編代碼。

匯編:將匯編語言文件編譯成二進(jìn)制目標(biāo)文件。

鏈接:將匯編出來的多個二進(jìn)制目標(biāo)文件鏈接在一起,形成最終的可執(zhí)行文件。

多個文件的編譯

例子:鍵盤輸入兩個整形數(shù)字,計(jì)算他們的和,將結(jié)果顯示在屏幕上。

//main.c #include <stdio.h> #include "input.h" #include "calcu.h"int main(int argc, char *argv[]) {int a, b, num;input_int(&a, &b);num = calcu(a, b);printf("%d + %d = %d\r\n", a, b, num); }//input.c #include <stdio.h> #include "input.h"void input_int(int *a, int *b) { printf("input two num:"); scanf("%d %d", a, b); printf("\r\n"); }//calcu.c #include "calcu.h" int calcu(int a, int b) {return (a + b); }//input.h #ifndef _INPUT_H #define _INPUT_Hvoid input_int(int *a, int *b); #endif//calcu.h #ifndef _CALCU_H #define _CALCU_Hint calcu(int a, int b); #endif

可以使用下面這個語句對三個文件編譯,生成名為main的可執(zhí)行文件。

gcc main.c calcu.c input.c -o main

編譯完之后,執(zhí)行main,流程如下。

但是以上方法存在問題:1.如果文件數(shù)量多,不方便。2.使用上面命令,編譯時所有文件會重新編譯,耗時多。3.沒有修改的文件不需要再次重新編譯。

一個解決方法如下:

gcc -c main.c gcc -c input.c gcc -c calcu.c gcc main.o input.o calcu.o -o main

-c選項(xiàng),只編譯不鏈接。

最后的命令是將所有.o文件鏈接成可執(zhí)行文件main。

如果修改input.c文件,只需要將input.c重新編譯成.o文件,執(zhí)行下面兩條命令:

gcc -c input.c gcc main.o input.o calcu.o -o main

但是,存在問題:修改文件多,不知道哪個文件修改過。

Makefile

以上,是通過在終端執(zhí)行g(shù)cc 命令完成C文件的編譯。文件很多,上面的方法就不好使了。

Makefile文件,描述哪些文件需要編譯或重新編譯。

Makefile里面,可以執(zhí)行系統(tǒng)命令。

使用make命令,可完成整個工程的自動編譯。

仍然對于上面的例子:鍵盤輸入兩個整形數(shù)字,計(jì)算他們的和,將結(jié)果顯示在屏幕上。

創(chuàng)建Makefile文件,輸入如下內(nèi)容:

使用Makefile編譯文件的過程如下。

修改了input.c文件之后,再執(zhí)行make命令,發(fā)現(xiàn)只是重新編譯了input.c文件。

如果工程沒有編譯過,工程中所有.c 文件都被編譯并且鏈接成可執(zhí)行程序。

工程中只有個別C文件被修改,只編譯這些被修改的C文件,并且鏈接成可執(zhí)行文件。

工程的頭文件被修改了,只需要編譯所有引用這個頭文件的C文件,并且鏈接成可執(zhí)行文件。

總結(jié)

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

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