新聞中心
Linux作為一個(gè)自由的操作系統(tǒng),但由于其高度靈活性,因此在使用過(guò)程中,需要進(jìn)行一定的編譯操作,才能使其更好地適應(yīng)用戶(hù)的需求。但對(duì)于初學(xué)者來(lái)說(shuō),編譯可能會(huì)是一項(xiàng)比較困難的任務(wù)。

專(zhuān)注于為中小企業(yè)提供網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)廈門(mén)免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千余家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
在本文中,我們將介紹一些基本的編譯技巧,從而幫助初學(xué)者更好地理解和熟練使用Linux系統(tǒng)下的編譯操作。
1. 編輯器的選擇
在Linux系統(tǒng)中,經(jīng)常使用的編輯器有vi和nano等。不同的編輯器有著不同的使用方式和命令,因此用戶(hù)們應(yīng)該選擇一個(gè)他們熟悉和喜歡的編輯器,來(lái)進(jìn)行編輯和編譯操作。一些比較流行的編輯器如vi和nano,可以在Linux系統(tǒng)中很容易地使用。
2. 命令的使用
編譯操作需要用戶(hù)掌握一些常用命令,如gcc、make等。gcc是Linux系統(tǒng)中常用的C語(yǔ)言編譯器,該命令可以將C語(yǔ)言源碼編譯成可執(zhí)行文件。make命令可以使用戶(hù)根據(jù)Makefile文件自動(dòng)構(gòu)建和編譯C語(yǔ)言源碼。
下面是一些常用的命令:
“`
gcc -o – 編譯源文件到指定的輸出文件
make – 編譯并構(gòu)建Makefile文件的源碼
make install – 安裝使用make命令安裝的程序
“`
3. Makefile文件的概念
Makefile是一個(gè)文本文件,該文件中包含了一系列規(guī)則,用于編譯程序。Makefile的編寫(xiě)需要學(xué)習(xí)和一定的經(jīng)驗(yàn),并且需要用戶(hù)根據(jù)具體的需求進(jìn)行編輯。Makefile文件中包括了編譯規(guī)則、編譯選項(xiàng)、源文件等信息。
Makefile的實(shí)例:
“`
CC=gcc
CFLAGS=-Wall
LDFLAGS=
all: hello
hello: hello.c
$(CC) $(CFLAGS) $(LDFLAGS) -o hello hello.c
clean:
rm -rf *.o hello
“`
4. 如何使用Makefile文件進(jìn)行編譯
用戶(hù)需要進(jìn)入源碼所在的目錄,在該目錄下執(zhí)行make命令,該命令將根據(jù)Makefile文件對(duì)源碼進(jìn)行編譯構(gòu)建。在構(gòu)建完成后,用戶(hù)可以使用make clean命令,清除之前構(gòu)建的所有文件。
5. 調(diào)試程序
在進(jìn)行編譯操作時(shí),程序中可能會(huì)出現(xiàn)一些錯(cuò)誤,因此需要進(jìn)行調(diào)試。GDB是Linux中使用最多的調(diào)試器,用戶(hù)需要將源代碼編譯為可執(zhí)行文件,通過(guò)GDB進(jìn)行調(diào)試和定位錯(cuò)誤。
使用GDB的方法如下:
“`
gdb – 啟動(dòng)GDB
break – 在源代碼指定函數(shù)上添加斷點(diǎn)
run – 啟動(dòng)目標(biāo)程序
step – 逐行執(zhí)行程序
continue – 恢復(fù)程序的執(zhí)行
print – 打印變量的值
“`
:
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來(lái)專(zhuān)注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線(xiàn):028-86922220linux 如何運(yùn)行編譯程序
gcc有多達(dá)100多個(gè)參數(shù),現(xiàn)介紹常用的幾個(gè)。如果對(duì)其他參數(shù)也有興趣,可以參考:man gcc
預(yù)先處理選項(xiàng)
-E: 只對(duì)文件進(jìn)行預(yù)處理,輸出結(jié)果到標(biāo)準(zhǔn)輸出
-C: 告訴預(yù)處理器不要丟棄注釋.配合`-E‘選項(xiàng)使用.-P: 告訴預(yù)處理器不要產(chǎn)生`#line’命令.配合`-E’選項(xiàng)使用.
-v: 顯示正在使用的gcc的版本
常用編譯選項(xiàng)
-c: 將源程序編譯為目標(biāo)代碼但并不做鏈接的工作,不生成最終的可執(zhí)行文件,只生成一個(gè)與源文件文件名相同的以.o為后綴的目標(biāo)文件。
-S:將遠(yuǎn)程序編譯為一個(gè)后綴為.s的匯編語(yǔ)言文件,不會(huì)生成可執(zhí)行文件
-x:強(qiáng)制編譯器用指定的語(yǔ)言編譯器來(lái)編譯某個(gè)源文件
gcc -x c++ test.c 表示強(qiáng)制用C++編譯器來(lái)編譯c程序
-static: 強(qiáng)制連接靜態(tài)庫(kù),運(yùn)行時(shí)不依賴(lài)動(dòng)態(tài)庫(kù)
-share: 編譯時(shí)盡量使用動(dòng)態(tài)庫(kù)
-o: 指定生成的可執(zhí)行文件名,如果沒(méi)有該選項(xiàng),如果生成可執(zhí)行文件,默認(rèn)文件名為a.out
編譯路徑選項(xiàng)
-i : 指定特定頭文件
gcc –c -i /home/zry/test.h test.c
-I: 依賴(lài)選項(xiàng),指定頭文件路徑
Linux下大多數(shù)函數(shù)將頭文件放在/usr/include目錄下,如果需要指定其他路徑,可以使用該選項(xiàng)
gcc –I/home/zry/include –c test.c 添加/home/zry/include到查找路徑
-L : 指定庫(kù)文件搜素路徑,用法同上
-l:指定特定庫(kù)文件
gcc –lapp –c test.c
Linux的庫(kù)文件有一個(gè)約定,即以lib開(kāi)頭,-lapp表示連接libapp.so庫(kù)文件
目標(biāo)生成選項(xiàng)
-shared: 生成動(dòng)態(tài)庫(kù)
gcc –shared libtest.so -i /home/zry/test.h test.c
生成靜態(tài)庫(kù)需要ar命令,后面講解
-fPIC: 生成可用于動(dòng)態(tài)庫(kù)的位置獨(dú)立代碼。所有的內(nèi)部尋址均通過(guò)全局偏移表完成。
-ansi:支持符合ANSI標(biāo)準(zhǔn)的C程序.
該選項(xiàng)就會(huì)關(guān)閉GNU C中某些不兼容ANSI C的特性,例如a, inline和 typeof關(guān)鍵字以及諸如unix和vax這些表明當(dāng)前系統(tǒng)類(lèi)型的預(yù)定義宏。
__a__, __extension__, __inline__和__typeof__仍然有效
使用`-ansi’選項(xiàng)的時(shí)候,預(yù)處理器會(huì)預(yù)定義一個(gè)__STRICT_ANSI__宏.有些頭文件 關(guān)注此宏,以避免聲明某些函數(shù),或者避免定義某些宏,這些函數(shù)和宏不被ANSI標(biāo)準(zhǔn)調(diào)用;這樣就不會(huì)干擾在其他地方使用這些名字的程碼銷(xiāo)序了.
fno-a:此選項(xiàng)實(shí)現(xiàn)ansi選項(xiàng)的功能的一部分,它禁止將a,inline和typeof用作關(guān)鍵字。
-fno-strict-prototype:只對(duì)g++起作用,使用這個(gè)選項(xiàng),g++將對(duì)不帶參數(shù)的函數(shù),都認(rèn)為是沒(méi)有顯式的對(duì)參數(shù)的個(gè)數(shù)和類(lèi)型說(shuō)明,而不是沒(méi)有參數(shù).而gcc無(wú)論是否使用這個(gè)參數(shù),都將對(duì)沒(méi)有帶參數(shù)的函數(shù),認(rèn)為沒(méi)有顯式說(shuō)明的類(lèi)型
-fthis-is-varialble:就是向傳統(tǒng)c++看齊,可以使用this當(dāng)一般變量使用
-fcond-miatch:允許條件表達(dá)式的第二和第三參數(shù)類(lèi)型不匹配,表達(dá)式的值將為void類(lèi)型
-funsigned-char:
-fno-signed-char:
-fsigned-char:
-fno-unsigned-char:
這四個(gè)參數(shù)是對(duì)char類(lèi)型進(jìn)行設(shè)置,將char類(lèi)型設(shè)置unsigned char(前兩個(gè)參數(shù))或者 signed char(后兩個(gè)參數(shù))
-imacros file: 將file文件的宏,擴(kuò)展到gcc/g++的輸入文件,宏定義本身并不出現(xiàn)在輸入文件中
-Dmacro: 相當(dāng)于C語(yǔ)言凱肆中的#define macro
-Dmacro=defn: 相當(dāng)于C語(yǔ)言中的#define macro=defn
-Umacro: 相當(dāng)于C語(yǔ)言中的#undef macro
-undef: 取消對(duì)任何非標(biāo)準(zhǔn)宏的定義
-M: 生成文件關(guān)聯(lián)的信息。包含目標(biāo)文件所依賴(lài)的所有源代碼
-MM: 和M一樣,但是它將忽略由#include造成的依賴(lài)關(guān)系。
-MD: -M相同,但是輸出將導(dǎo)入到.d的文件里面
-MMD: 和-MM相同,但是輸出將導(dǎo)入到.d的文件里面
警告選項(xiàng)
fsyntax-only:檢查程序中的語(yǔ)法錯(cuò)誤,但是不產(chǎn)生輸出信息.
-w:禁止所有警告信息.
-Wno-import: 禁止所有關(guān)于#import的警告信息.
-pedantic:打開(kāi)完全遵從ANSI C標(biāo)準(zhǔn)所需的全部警告診斷;拒絕接受采用了被禁止的語(yǔ)法擴(kuò)展的程序.
-Werror:將所有警告轉(zhuǎn)換為錯(cuò)誤
Werror選項(xiàng)要求GCC將所有警告當(dāng)作錯(cuò)誤進(jìn)行處理。
-Wall: 顯示所有警告信息
在終端里運(yùn)行。在linux中有一個(gè)終端,類(lèi)似于windows下的cmd
lz有這個(gè)疑問(wèn),說(shuō)明lz用的是帶圖形用戶(hù)界面的linux。
如果是ubuntu,那么,在應(yīng)用腔敏答程序拿如(applications)–>附件(accessories)–>終端(terminal)中輸入命令。伍慧
linux系統(tǒng)下編譯怎么操作的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux系統(tǒng)下編譯怎么操作,Linux編譯指南:快速掌握系統(tǒng)下編譯操作技巧,linux 如何運(yùn)行編譯程序的信息別忘了在本站進(jìn)行查找喔。
成都網(wǎng)站建設(shè)選創(chuàng)新互聯(lián)(?:028-86922220),專(zhuān)業(yè)從事成都網(wǎng)站制作設(shè)計(jì),高端小程序APP定制開(kāi)發(fā),成都網(wǎng)絡(luò)營(yíng)銷(xiāo)推廣等一站式服務(wù)。
新聞標(biāo)題:Linux編譯指南:快速掌握系統(tǒng)下編譯操作技巧(linux系統(tǒng)下編譯怎么操作)
瀏覽路徑:http://m.5511xx.com/article/cojsdhh.html


咨詢(xún)
建站咨詢(xún)
