《Linux系統程式設計筆記》 DAY01

2022-06-26 05:51:11 字數 3921 閱讀 3365

跳轉到檔案首

​ gg(命令模式)

游標移至行首:

游標移至行尾:

自動格式化程式

大括號對應

跳轉至man手冊:

​ 將游標置於待檢視函式單詞上,用nk(n是第幾卷)

刪除乙個單詞

刪除游標至行尾

刪除游標至行首

刪除指定區域:

​ 按v(命令模式)切換為「可視模式」,選中要刪除的區域,按d刪除

刪除指定一行

​ 在游標所在行,按dd

刪除多行

​ ndd

複製一行

​ yy(命令模式)

​ p貼上(游標所在下一行)

​ p(貼上)(游標所在上一行)

​ 末行模式下按「/」輸入要查詢的單詞 回車 n下乙個

​ 命令模式下,將游標置於單詞任意乙個字元上,按「*」或"#"

撤銷 u

反撤銷 ctrl+r

顯式行號 :set number

末行模式 sp +回車(橫屏) 切屏:ctrl+ww

末行模式 vsp+回車(豎屏) 切屏:ctrl+ww

​ :!命令 :!ls-l

1.預處理(gcc -e):展開巨集,標頭檔案,替換條件編譯,刪除注釋,空行,空白

2.編譯(gcc -s):檢查語法規範【消耗時間,系統資源最多】

3.彙編(gcc -c):將彙編指令翻譯成機器指令

hello.c---預處理-->hello.i----編譯---->hello.s-----彙編------>hello.o-----鏈結------>a.out

-i 指定標頭檔案所在目錄位置

-c 只做預處理,編譯,彙編。得到 二進位制檔案!(.o檔案)

-g 編譯時新增除錯檔案。主要支援gdb除錯

-on n=0~3;編譯優化,優化等級(預設2級),n越大優化越多

-wall 顯式所有警告資訊

-d 向程式中,「動態」註冊巨集定義

-l 指定庫位置

​ 靜態庫:對空間要求較低,而時間要求較高

​ 共享庫:對空間要求較高,而時間要求較低

1.將 .c生成 .o檔案

gcc -c add.c -o add.o

2.使用ar工具生成靜態庫

ar	rcs	libmylib.a	file1.o
3.編譯靜態庫到可執行檔案中

​ gcc test.c lib庫名.a -o a.out

1.將.c生成.o檔案(生成與位置無關的** -fpic)

​ gcc -c add.c -o add.o -fpic

​ 2.使用 gcc -shared 製作動態庫(.so檔案)

​ gcc -shared -o lib庫名.so add.o sub.o

​ 3.編譯可執行程式時,指定所使用的動態庫。-l:指定庫名(去掉lib字首和.so字尾),-l:指定庫路徑

​ gcc test.c -o a.out -l mymath -l ./lib

​ 4.執行可執行程式 ./a.out出錯

*​ 原因:

​ 鏈結器 工作於鏈結階段,工作時需要 -l和-l

​ 動態鏈結器 工作於層序執行階段,工作時需要提供動態庫所在目錄位置

​ 通過環境變數改變:export ld_library_path=動態庫路徑

​ 永久生效:寫入 終端配置檔案。 .bashrc

​ 1)vi ~./bashrc

​ 2)寫入export ld_library_path=動態庫路徑

​ 3). .bashrc/ source .bashrc /重啟 終端----->讓修改後的.bashrc生效 *

​ 修改/etc/ld.so.conf

​ 1.sudo vi /etc/ld.so.conf

​ 2.新增你的共享庫路徑

​ 3.更新查詢共享庫的路徑

​ sudo ldconfig -v

​ 4.測試程式可否找到共享庫

​ ldd a.out

擴充套件——資料段合併(鏈結時合併)

【好像我記得上面的步驟有問題,下次使用記得的再補充】

-g :使用該引數編譯可執行檔案,得到除錯表

​ gdb a.out

​ list:list 1 列出原始碼。根據原始碼指定 行號設定斷點

​ b: b 20 在20行設定斷點

​ r: 執行程式

​ p: 檢視變數的值

​ continue:繼續執行斷點後續指令

​ quit:退出gdb當前除錯

​ finish:結束當前函式呼叫

出現段錯誤,解決方法:

​ run:使用run查詢段錯誤位置

​ set args:設定main函式命令列引數

​ run 字串1 字串2 ...:設定main函式命令列引數

​ info b:檢視斷點資訊表

​ b 20 if i=5:設定條件斷點

​ ptype:檢視變數型別

​ bt:列出當前程式正存活著的棧幀(形參和區域性變數都在棧幀上)

​ frame:根據棧幀編號進行切換

​ display:跟蹤變數值,undisplay 取消跟蹤

set follow-fork-mode child	命令設定gdb在fork之後跟蹤程序

set follow-fork-mode parent 設定跟蹤父程序

命名:makefile	makefile	------make命令
1個規則

目標:依賴條件

(乙個tab縮排)命令

all:指定makefile的終極目標

2個函式:

​ src=$(wildcard *.c)

​ 找到當前目錄下所有字尾為.c的檔案,賦值給src(src=add.c sub.c div.c)

obj=$(patsubst %.c,%.o,$(src))

​ 將引數3中,包含引數1的部分,替換為引數2(obj=add.o sub.o div.o)

​ clean:(沒有依賴)

-rm -rf $(obj) a.out「-」作用是:刪除不存在檔案時,不報錯。順序執行結束

3個自動變數

​ $@:在規則的命令中,表示規則中的目標

​ $<:在規則的命令中,表示第乙個依賴條件。如果將該變數應用在模式規則中,它可將依賴條件列表中的依賴一次取出,套用模式規則

​ $^:表示規則中的所有條件,組成乙個列表,以空格隔開,如果這個列表中有重複的規則消除重複項

​ 模式規則:

​ %.o:%.c

​ gcc -c $< -o $@

​ 靜態模式規則:

​ $(obj):%.o:%.c

​ 偽目標:

​ .phony:clean all

​ 引數:

​ -n : 模擬執行make,make clean命令

​ -f: 指定檔案執行make命令

Python學習筆記 day0

本部落格標題設計敏感關鍵字0day,違反相關法律法規,現已處理。1.輸入 raw input 這個可以輸入一行。和c 不同,它不能讀取單個整數 我的意思是,它是以字串儲存的。所以沒有什麼諸如 d這種東西。name raw input 這樣就可以讀入乙個字串,相當於gets name 考慮到人性化設計...

前端學習筆記 day0

utf 8 萬國碼 開發時我們使用的字符集都是utf 8 gb2312 國標 通過meta標籤設定網頁字符集,避免亂碼問題。此處為設定字符集,避免亂碼 用來設定網頁的元資料,底層資料,網頁的屬性。元資料不是給使用者看的 它是自結束標籤 常用的屬性 name指定資料的名稱 content指定資料的內容...

讀書筆記 DAY0 入門

作為一門程式語言,必然有其不足,python的缺陷體現在以下兩個方面 python安裝包提供的直譯器為用c語言開發的cpython,命令列提示符視窗執行python就是啟動該直譯器,其他直譯器有ipython pypy jython ironpython等。所謂直譯器,就是執行程式時,將程式一條一天...