??個(gè)人主頁:平凡的小蘇
??學(xué)習(xí)格言:命運(yùn)給你一個(gè)低的起點(diǎn),是想看你精彩的翻盤,而不是讓你自甘墮落,腳下的路雖然難走,但我還能走,比起向陽而生,我更想嘗試逆風(fēng)翻盤。
??C++專欄:Linux內(nèi)功修煉
家人們更新不易,你們的??點(diǎn)贊??和?關(guān)注?真的對我真重要,各位路 過的友友麻煩多多點(diǎn)贊關(guān)注。歡迎你們的私信提問,感謝你們的轉(zhuǎn)發(fā)! 關(guān)注我,關(guān)注我,關(guān)注我,你們將會(huì)看到更多的優(yōu)質(zhì)內(nèi)容?。?/strong>
1.Linux 軟件包管理器 yum
1.1 關(guān)于 rzsz
這個(gè)工具用于 windows 機(jī)器和遠(yuǎn)端的 Linux 機(jī)器通過 XShell 傳輸文件.
安裝完畢之后可以通過拖拽的方式將文件上傳過去.
注意:關(guān)于 yum 的所有操作必須保證主機(jī)(虛擬機(jī))網(wǎng)絡(luò)暢通!!!
可以通過 ping 指令驗(yàn)證:ping www.baidu . com
1.2 查看軟件包
通過 yum list 命令可以羅列出當(dāng)前一共有哪些軟件包. 由于包的數(shù)目可能非常之多, 這里我們需要使用 grep 命令只篩選出我們關(guān)注的包. 例如:
yum list | grep lrzsz
結(jié)果如下:
lrzsz.x86_64 0.12.20-36.el7 @base
1.3 如何安裝軟件
通過 yum, 我們可以通過很簡單的一條命令完成 gcc 的安裝.
sudo yum install lrzsz
注:sudo是將用戶提升權(quán)限,執(zhí)行root的權(quán)限,因?yàn)閥um要在超級用戶才能安裝
1.4 如何卸載軟件
sudo yum remove lrzsz
2. Linux編輯器-vim使用
2.1 vim的基本概念
我們講解vim的三種模式(其實(shí)有好多模式,目前掌握這3種即可),分別是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能區(qū)分如下:
- 正常/普通/命令模式(Normal mode)
控制屏幕光標(biāo)的移動(dòng),字符、字或行的刪除,移動(dòng)復(fù)制某區(qū)段及進(jìn)入Insert mode下,或者到 last line mode
- 插入模式(Insert mode)
只有在Insert mode下,才可以做文字輸入,按「ESC」鍵可回到命令行模式。
該模式是我們后面用的最頻繁的編輯模式。
- 底行模式(last line mode)
文件保存或退出,也可以進(jìn)行文件替換,找字符串,列出行號等操作。 在命令模式下,
shift+:(shift+分號=分號) 即可進(jìn)入該模式。要查看你的所有模式:打開vim,底行模式直接輸入
2.2 vim的基本操作
重點(diǎn)總結(jié)vim的操作
3. 簡單vim配置
3.1 配置文件的位置
-
在目錄 /etc/ 下面,有個(gè)名為vimrc的文件,這是系統(tǒng)中公共的vim配置文件,對所有用戶都有效。
-
而在每個(gè)用戶的主目錄下,都可以自己建立私有的配置文件,命名為:“.vimrc”。例如,/root目錄下,通常已經(jīng)存在一個(gè).vimrc文件,如果不存在,則創(chuàng)建之。
-
切換用戶成為自己執(zhí)行 su ,進(jìn)入自己的主工作目錄,執(zhí)行 cd ~
-
打開自己目錄下的.vimrc文件,執(zhí)行 vim .vimrc
注:如果我們懶得話,想一鍵配置vim,那么我們可以去gitee搜forvimcpp
安裝方法
在 shell 中執(zhí)行指令(想在哪個(gè)用戶下讓vim配置生效, 就在哪個(gè)用戶下執(zhí)行這個(gè)指令. 強(qiáng)烈 “不推薦” 直接在 root 下執(zhí)行):
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh
需要按照提示輸入 root 密碼. 您的 root 密碼不會(huì)被上傳, 請放心輸入.
卸載方法
在安裝了 VimForCpp 的用戶下執(zhí)行:
bash ~/.VimForCpp/uninstall.sh
4. sudo命令
sudo是可以執(zhí)行root超級用戶權(quán)限的命令,需要我們將用戶添加的信任列表
才能夠使用sudo命令,我們需要進(jìn)入root超級用戶,執(zhí)行vim /etc/sudoers,
大概在一百行處,添加普通用戶到信用列表。
注:對應(yīng)著超級用戶添加普通用戶,就可以成為信任用戶了
5. Linux編譯器-gcc/g++的使用
5.1 背景知識
-
預(yù)處理(進(jìn)行宏替換)
預(yù)處理功能主要包括宏定義,文件包含,條件編譯,去注釋等。
預(yù)處理指令是以#號開頭的代碼行。
實(shí)例: gcc –E hello.c –o hello.i
選項(xiàng)“-E”,該選項(xiàng)的作用是讓 gcc 在預(yù)處理結(jié)束后停止編譯過程。
選項(xiàng)“-o”是指目標(biāo)文件,“.i”文件為已經(jīng)過預(yù)處理的C原始程序。
-
編譯(生成匯編)
在這個(gè)階段中,gcc 首先要檢查代碼的規(guī)范性、是否有語法錯(cuò)誤等,以確定代碼的實(shí)際要做的工作,
在檢查無誤后,gcc 把代碼翻譯成匯編語言。
用戶可以使用“-S”選項(xiàng)來進(jìn)行查看,該選項(xiàng)只進(jìn)行編譯而不進(jìn)行匯編,生成匯編代碼。
實(shí)例: gcc –S hello.i –o hello.s
-
匯編(生成機(jī)器可識別代碼)
匯編階段是把編譯階段生成的“.s”文件轉(zhuǎn)成目標(biāo)文件
讀者在此可使用選項(xiàng)“-c”就可看到匯編代碼已轉(zhuǎn)化為“.o”的二進(jìn)制目標(biāo)代碼了
實(shí)例: gcc –c hello.s –o hello.o
-
連接(生成可執(zhí)行文件或庫文件)
在成功編譯之后,就進(jìn)入了鏈接階段。
實(shí)例: gcc hello.o –o hello
5.2 函數(shù)庫
我們的C程序中,并沒有定義“printf”的函數(shù)實(shí)現(xiàn),且在預(yù)編譯中包含的“stdio.h”中也只有該函數(shù)的聲明,而沒有定義函數(shù)的實(shí)現(xiàn),那么,是在哪里實(shí)“printf”函數(shù)的呢?
最后的答案是:系統(tǒng)把這些函數(shù)實(shí)現(xiàn)都被做到名為 libc.so.6 的庫文件中去了,在沒有特別指定時(shí),
gcc 會(huì)到系統(tǒng)默認(rèn)的搜索路徑“/usr/lib”下進(jìn)行查找,也就是鏈接到 libc.so.6 庫函數(shù)中去,這樣就能實(shí)現(xiàn)函數(shù)“printf”了,而這也就是鏈接的作用
注意:在linux中,編譯形成可執(zhí)行程序,默認(rèn)采用的就是動(dòng)態(tài)鏈接–提供動(dòng)態(tài)庫
如果想要按照靜態(tài)鏈接的方式,進(jìn)行形成可執(zhí)行程序,需要添加
-static
選項(xiàng)centos默認(rèn)是只安裝
動(dòng)態(tài)庫
,而靜態(tài)庫
是沒有安裝的安裝指令:sudo yum install -y glibc-static (c語言靜態(tài)庫)
? sudo yum install -y libstdc+±static (c++靜態(tài)庫)
1.如果我們沒有 靜態(tài)庫,但是我們就要-static,行不行呢?不行
2.如果我們沒有動(dòng)態(tài)庫,只有靜態(tài)庫,而且gcc能找到-能的,gcc默認(rèn)優(yōu)先動(dòng)態(tài)鏈接,-static本質(zhì):改變優(yōu)先級
查看鏈接方式
5.3 動(dòng)靜態(tài)庫的優(yōu)缺點(diǎn)
1.動(dòng)態(tài)庫因?yàn)闀r(shí)共享庫,有效的節(jié)省空間(磁盤空間,內(nèi)存空間,網(wǎng)絡(luò)空間等等)(優(yōu)點(diǎn))
動(dòng)態(tài)庫一旦缺失,導(dǎo)致整個(gè)程序無法執(zhí)行(缺點(diǎn))
2.靜態(tài)庫,不依賴庫,程序可以獨(dú)立執(zhí)行(優(yōu)點(diǎn))
體積大,比較消耗資源(缺點(diǎn))
5.4 gcc選項(xiàng)
-E 只激活預(yù)處理,這個(gè)不生成文件,你需要把它重定向到一個(gè)輸出文件里面
-S 編譯到匯編語言不進(jìn)行匯編和鏈接
-c 編譯到目標(biāo)代碼
-o 文件輸出到 文件
-static 此選項(xiàng)對生成的文件采用靜態(tài)鏈接
-g 生成調(diào)試信息。GNU 調(diào)試器可利用該信息。
-shared 此選項(xiàng)將盡量使用動(dòng)態(tài)庫,所以生成文件比較小,但是需要系統(tǒng)由動(dòng)態(tài)庫.
-O0
-O1
-O2
-O3 編譯器的優(yōu)化選項(xiàng)的4個(gè)級別,-O0表示沒有優(yōu)化,-O1為缺省值,-O3優(yōu)化級別最高
-w 不生成任何警告信息。
-Wall 生成所有警告信息。
6.Linux項(xiàng)目自動(dòng)化構(gòu)建工具-make/Makefifile
-
makefifile帶來的好處就是——“自動(dòng)化編譯”,一旦寫好,只需要一個(gè)make命令,整個(gè)工程完全自動(dòng)編譯,極大的提高了軟件開發(fā)的效率。
-
make是一個(gè)命令工具,是一個(gè)解釋makefifile中指令的命令工具,一般來說,大多數(shù)的IDE都有這個(gè)命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make??梢姡琺akefifile都成為了一種在工程方面的編譯方法。
-
make是一條命令,makefifile是一個(gè)文件,兩個(gè)搭配使用,完成項(xiàng)目自動(dòng)化構(gòu)建。
代碼例子:
hello:hello.o
gcc hello.o -o hello
hello.o:hello.s
gcc -c hello.s -o hello.o
hello.s:hello.i
gcc -S hello.i -o hello.s
hello.i:hello.c
gcc -E hello.c -o hello.i
.PHONY:clean
clean:
rm -rf hello hello.o hello.s hello.i
6.1 makefile原理
-
make會(huì)在當(dāng)前目錄下找名字叫“Makefifile”或“makefifile”的文件。
-
如果找到,它會(huì)找文件中的第一個(gè)目標(biāo)文件(target),在上面的例子中,他會(huì)找到“hello”這個(gè)文件,并把這個(gè)文件作為最終的目標(biāo)文件。
-
如果hello文件不存在,或是hello所依賴的后面的hello.o文件的文件修改時(shí)間要比hello這個(gè)文件新(可以用 touch 測試),那么,他就會(huì)執(zhí)行后面所定義的命令來生成hello這個(gè)文件。
-
如果hello所依賴的hello.o文件不存在,那么make會(huì)在當(dāng)前文件中找目標(biāo)為hello.o文件的依賴性,如果找到則再根據(jù)那一個(gè)規(guī)則生成hello.o文件。(這有點(diǎn)像一個(gè)堆棧的過程)
-
當(dāng)然,你的C文件和H文件是存在的啦,于是make會(huì)生成 hello.o 文件,然后再用 hello.o 文件聲明make的終極任務(wù),也就是執(zhí)行文件hello了。
-
這就是整個(gè)make的依賴性,make會(huì)一層又一層地去找文件的依賴關(guān)系,直到最終編譯出第一個(gè)目標(biāo)文件。
-
在找尋的過程中,如果出現(xiàn)錯(cuò)誤,比如最后被依賴的文件找不到,那么make就會(huì)直接退出,并報(bào)錯(cuò),而對于所定義的命令的錯(cuò)誤,或是編譯不成功,make根本不理。
-
make只管文件的依賴性,即,如果在我找了依賴關(guān)系之后,冒號后面的文件還是不在,那么對不起,我就不工作啦。
6.2 項(xiàng)目清理
工程是需要被清理的
像clean這種,沒有被第一個(gè)目標(biāo)文件直接或間接關(guān)聯(lián),那么它后面所定義的命令將不會(huì)被自動(dòng)執(zhí)行,不過,我們可以顯示要make執(zhí)行。即命令——“make clean”,以此來清除所有的目標(biāo)文件,以便重編譯。但是一般我們這種clean的目標(biāo)文件,我們將它設(shè)置為偽目標(biāo),用 .PHONY 修飾,偽目標(biāo)的特性是,總是被執(zhí)行的??梢詫⑽覀兊?hello 目標(biāo)文件聲明成偽目標(biāo),測試一下
注意:make是如何判斷文件是否需要重新執(zhí)行的呢?那么我們就需要知道Access,Modify,Change
時(shí)間,make是根據(jù)這個(gè)時(shí)間來判斷是否需要重新執(zhí)行。
Modify會(huì)根據(jù)文件的內(nèi)容的修改而更改到最新的時(shí)間
Change會(huì)根據(jù)文件的屬性的修改而更改到最新的時(shí)間
7.Linux調(diào)試器-gdb使用
7.1 背景
程序的發(fā)布方式有兩種,debug模式和release模式
Linux gcc/g++出來的二進(jìn)制程序,默認(rèn)是release模式
要使用gdb調(diào)試,必須在源代碼生成二進(jìn)制程序的時(shí)候, 加上 -g 選項(xiàng)
7.2 使用
list/l 行號:顯示binFile源代碼,接著上次的位置往下列,每次列10行。
list/l 函數(shù)名:列出某個(gè)函數(shù)的源代碼。
r或run:運(yùn)行程序。
n 或 next:單條執(zhí)行。
s或step:進(jìn)入函數(shù)調(diào)用
break(b) 行號:在某一行設(shè)置斷點(diǎn)
break 函數(shù)名:在某個(gè)函數(shù)開頭設(shè)置斷點(diǎn)
info break :查看斷點(diǎn)信息。
fifinish:執(zhí)行到當(dāng)前函數(shù)返回,然后挺下來等待命令
print§:打印表達(dá)式的值,通過表達(dá)式可以修改變量的值或者調(diào)用函數(shù)
p 變量:打印變量值。
set var:修改變量的值
continue(或c):從當(dāng)前位置開始連續(xù)而非單步執(zhí)行程序
run(或r):從開始連續(xù)而非單步執(zhí)行程序
delete breakpoints:刪除所有斷點(diǎn)
delete breakpoints n:刪除序號為n的斷點(diǎn)
disable breakpoints:禁用斷點(diǎn)
enable breakpoints:啟用斷點(diǎn)
info(或i) breakpoints:參看當(dāng)前設(shè)置了哪些斷點(diǎn)
display 變量名:跟蹤查看一個(gè)變量,每次停下來都顯示它的值
undisplay:取消對先前設(shè)置的那些變量的跟蹤
until X行號:跳至X行
breaktrace(或bt):查看各級函數(shù)調(diào)用及參數(shù)
info(i) locals:查看當(dāng)前棧幀局部變量的值
quit:退出gdb
圖片總結(jié)文章來源:http://www.zghlxwxcb.cn/news/detail-525694.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-525694.html
到了這里,關(guān)于【Linux修煉】開發(fā)工具使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!