日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Linux代码编译(模式切换、gdb、编译器之间的对比、彩色进度条、rpm与yum区别)

發布時間:2024/1/8 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux代码编译(模式切换、gdb、编译器之间的对比、彩色进度条、rpm与yum区别) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

常用工具:

軟件包管理工具:yum
編程相關工具:vim、gcc/g++、gdb
項目相關工具:make/Makefile、git
查看軟件包:yum list/grep key
安裝軟件包:yum install package_name
刪除軟件包:yum remove package_name

編譯器:vim

vim中的操作模式共12種,常用的有3種。
普通模式:主要是指用命令進行文件內容操作
控制屏幕光標的移動,字符、字或行的刪除,移動復制某區段及進入Insert mode下,或者到 last line mode

插入模式:插入數據
只有在Insert mode下,才可以做文字輸入,按「ESC」鍵可回到命令行模式。該模式是我們后面用的最頻繁的編輯模式

底行模式:用于文件內容的保存和退出
文件保存或退出,也可以進行文件替換,找字符串,列出行號等操作。 在命令模式下,shift+: 即可進入該模式。要查看你的所有模式:打開vim,底行模式直接輸入

模式切換:

普通->插入:i a o I A O
插入->普通:ESC鍵(所有模式切換至普通均適用該方式)
i:從光標所在位置開始插入
a:光標向后移動一個字符開始插入
o:光標所在行下方增加新行開始出入
I: 光標移動到行首開始插入
A: 光標移動到行尾開始插入
O:光標所在行上方添加新行開始插入
普通->底行:輸入:
:w(保存當前文件)
:q(退出)
:wq(保存并退出)
:q!(強制退出)

普通模式下的命令操作:

插入模式:

  • 按「i」切換進入插入模式「insert mode」,按“i”進入插入模式后是從光標當前位置開始輸入文件;
  • 按「a」進入插入模式后,是從目前光標所在位置的下一個位置開始輸入文字;
  • 按「o」進入插入模式后,是插入新的一行,從行首開始輸入文字。
  • 光標移動操作:
  • 「h」、「j」、「k」、「l」,分別控制光標左、下、上、右移一格
  • 按「G」:移動到文章的最后
  • 按「 $ 」:移動到光標所在行的“行尾”
  • 按「^」:移動到光標所在行的“行首”
  • 按「w」:光標跳到下個字的開頭
  • 按「e」:光標跳到下個字的字尾
  • 按「b」:光標回到上個字的開頭
  • 按「#l」:光標移到該行的第#個位置,如:5l,56l
  • 按[gg]:進入到文本開始
  • 按[shift+g]:進入文本末端
  • 按「ctrl」+「b」:屏幕往“后”移動一頁
  • 按「ctrl」+「f」:屏幕往“前”移動一頁
  • 按「ctrl」+「u」:屏幕往“后”移動半頁
  • 按「ctrl」+「d」:屏幕往“前”移動半頁
  • 對文件內容操作:
  • 「yy」:復制光標所在行到緩沖區。
  • 「 nyy」 :從光標所在航開始向下復制n行數據
  • 「p」:向光標所在行下方進行粘貼。注意:所有與“y”有關的復制命令都必須與“p”配合才能完成復制與粘貼功能
  • 「 P」:項光標所在行上方進行粘貼。
  • 「dd」:刪除光標所在行
  • 「ndd」:從光標所在行開始刪除n行
  • 「dw」:刪除光標所在單詞
  • 「x」:每按一次,刪除光標所在位置的一個字符
  • 「u」:回到上一個操作
  • 「ctrl + r」: 撤銷的恢復
  • 「gg=G」:全文對齊
  • 底行模式操作:
  • 「set nu」: 輸入「set nu」后,會在文件中的每一行前面列出行號
  • 「#」:「#」號表示一個數字,在冒號后輸入一個數字,再按回車鍵就會跳到該行
  • 「/關鍵字」: 先按「/」鍵,再輸入您想尋找的字符,如果第一次找的關鍵字不是您想要的,可以一直按「n」會往后尋找到您要的關鍵字為止
  • 「?關鍵字」:先按「?」鍵,再輸入您想尋找的字符,如果第一次找的關鍵字不是您想要的,可以一直按「n」會往前尋找到您要的關鍵字為止
  • 「w」: 在冒號輸入字母「w」就可以將文件保存起來
  • 編譯器:gcc/g++

    功能:將高級語言解釋成機器可識別的指令

  • 預處理:展示所有代碼 gcc-E
    預處理功能主要包括宏定義,文件包含,條件編譯,去注釋等。
    預處理指令是以#號開頭的代碼行。
    選項“-E”,該選項的作用是讓 gcc 在預處理結束后停止編譯過程。
    選項“-o”是指目標文件,“.i”文件為已經過預處理的C原始程序。
    實例: gcc –E hello.c –o hello.i

  • 編譯:進行語法語義糾錯。若無錯誤,則將程序解釋為匯編語言 gcc-S
    在這個階段中,gcc 首先要檢查代碼的規范性、是否有語法錯誤等,以確定代碼的實際要做的工作,在檢查無誤后,gcc 把代碼翻譯成匯編語言。
    用戶可以使用“-S”選項來進行查看,該選項只進行編譯而不進行匯編,生成匯編代碼。
    實例: gcc –S hello.i –o hello.s

  • 匯編:將會匯編語言解釋成為二進制機器指令 gcc-C
    匯編階段是把編譯階段生成的“.s”文件轉成目標文件
    讀者在此可使用選項“-c”就可看到匯編代碼已轉化為“.o”的二進制目標代碼了
    實例: gcc –c hello.s –o hello.o

  • 鏈接:將所有的.o文件和庫文件進行打包,最終成為一個可執行程序
    在成功編譯之后,就進入了鏈接階段。
    實例: gcc hello.o –o hello

  • 庫文件:封裝的函數所打包的一個代碼文件

    鏈接方式:動態鏈接,靜態鏈接。

    1.動態鏈接——鏈接動態庫
    在可執行程序添加庫中的函數符號信息表,生成的可執行程序比較小。因為并沒有把函數的實現直接加入到可執行程序中。因此運行程序的時候需要依賴動態庫的存在。但是在內存中多個程序可以共用相同庫。從而降低了代碼冗余。動態庫一般后綴名為“.so”

    2.靜態鏈接——鏈接靜態庫
    在生成可執行程序時,直接將庫中的所有代碼實現都寫入到了可執行程序中。生成的可執行程序比較大。在運行程序時,若多個程序都靜態鏈接了同一個庫文件,會在內存中造成代碼冗余。但靜態鏈接的程序運行時不依賴庫存在。其后綴名一般為“.a”

    gcc的默認鏈接方式:動態
    在生成可執行程序時默認連接標準c庫。

    調試器:gdb

    1.調試的前提:debug版本的程序
    gcc默認生成release版本程序,因此要在編譯程序時使用gcc-g生成debug程序
    程序調試:

    1.gdb加載程序符號信息

    gdb./main gdb->file main

    2.流程控制指令

    run:直接運行程序
    start:開始調試
    list:查看調試行附近代碼 list file:line
    until:直接運行到指定行 until file:line
    next:下一步(直接運行)
    strp:下一步(跟蹤進入函數)
    continue:從當前位置開始運行程序

    3.斷點相關指令

    break:在某一行設置斷點
    break file:line:給指定函數指定行打斷點
    break func_name: 給指定函數開頭打斷點
    info break:查看斷點信息
    delete break id:刪除指定(序號為id)斷點
    delete break:刪除所有斷點
    watch variable_name:給變量打斷點

    4.其它指令

    quit:退出gdb
    breaktrace(或bt):查看各級函數調用及參數
    print(p):打印表達式的值,通過表達式可以修改變量的值或者調用函數

    自動化構建工具:make/Makefile

    1.Makefile:普通的文本文件-記錄項目的構建流程規則
    make:Makefile解釋器-逐行解釋Makefile中的項目構建規則,完成項目的構建

    Makefile的編寫規則:

    目標對象:依賴對象
    \t 要執行的指令

    目標對象:要生成的可執行程序名稱
    依賴對象:源碼文件 通過對目標對象的最后一次修改時間判斷,目標對象是否需要重新生成

    預定義變量:
    $^ 表示所有的依賴對象
    $@ 表示目標對象
    $< 第一個依賴對象
    .PHONY:聲明偽對象—不管對象是否最新、是否存在,每次都需要重新生成(通常用于聲明clean)

    make的解釋執行規則:

    1.make在Makefile中只尋找第一個目標對象進行生成,生成完畢則退出
    2.在生成目標對象之前,先判斷依賴對象是否需要生成(先找依賴對象的生成規則,)

    //聲明一個偽對象: .PHONT :main //生成可執行程序: main:main.o child.o gcc $^ -0 $@ //通配所有的.o的生成規則: %.o:%.c

    最簡單:

    main:main.c child.c gcc $^ -0 $@ .PHONY:clean clean:rm -f main

    升級版:

    main:main.o child.o gcc $^ -0 $@ %.o:%.c gcc $^ -0 $@.PHONY:clean clean:rm -f main wildcard:獲取當前路徑下以.c結尾的文件名 src=$(wildcard ./*.c) 字符替換 將變量內容中的后綴名 從.c修改為.o賦值給obj obj=$(patsubsr %.c,%.o,$(src))
    make工作原理:

    當我們只輸入make命令時:

  • make會在當前目錄下找名字叫“Make?le”或“make?le”的文件。
  • 如果找到,它會找文件中的第一個目標文件(target),在上面的例子中,他會找到“hello”這個文件,并把這個文件作為最終的目標文件。
  • 如果hello文件不存在,或是hello所依賴的后面的hello.o文件的文件修改時間要比hello這個文件新(可以用 touch 測試),那么,他就會執行后面所定義的命令來生成hello這個文件。
  • 如果hello所依賴的hello.o文件不存在,那么make會在當前文件中找目標為hello.o文件的依賴性,如果找到則再根據那一個規則生成hello.o文件。(這有點像一個堆棧的過程)
  • 當然,你的C文件和H文件是存在的啦,于是make會生成 hello.o 文件,然后再用 hello.o 文件聲明make的終極任務,也就是執行文件hello了。
  • 這就是整個make的依賴性,make會一層又一層地去找文件的依賴關系,直到最終編譯出第一個目標文件。
  • 在找尋的過程中,如果出現錯誤,比如最后被依賴的文件找不到,那么make就會直接退出,并報錯,
    而對于所定義的命令的錯誤,或是編譯不成功,make根本不理。
  • make只管文件的依賴性,即,如果在我找了依賴關系之后,冒號后面的文件還是不在,那么對不起,我就不工作啦。
  • 項目的版本管理工具:git–分布式管理工具

    這里涉及到github的使用。個人認為gethub是一個非常好用的軟件。

  • 從服務器上克隆一個倉庫
  • 添加修改的文件
  • 進行本地提交
  • 同步到服務器
  • int main() { int i=0;for(i=0;i<10;i++) { //針對標準輸出:換行符不僅有換行的作用,還有刷新緩沖區的作用 //\r是回車符 將光標移動到行首printf("-"); //fflush刷新文件緩沖區 fflush(stdout); sleep(1); } return 0; }

    其他常用的編輯器之間的橫向對比以及編輯器之間的區別和優缺點

  • Vim
    Vim是從 vi 發展出來的一個文本編輯器。代碼補完、編譯及錯誤跳轉等方便編程的功能特別豐富,在程序員中被廣泛使用。和Emacs并列成為類Unix系統用戶最喜歡的編輯器。

  • Eclipse
    Eclipse是一款很酷的開源代碼編輯器,它擁有代碼高亮和智能提示等強大的功能。在Eclipse中,完全勝任以下編程語言的工作——Python, R, Ruby, JavaScript, Natural, Lasso, C, C++, COBOL, Scheme, Clojure, Groovy等等,它也是Java集成開發環境,甚至提供了對Java 8的支持。在一些Web開發IDE特性的幫助下,你可以非常方便地對代碼文件進行組織和訪問。

  • Brackets
    Brackets也是一款為Linux開發者設計的開源代碼編輯器,使用Brackets寫代碼,你不會被任何事情所打斷。比如在寫HTML代碼時,即便你沒有保存代碼也可以及時預覽你的Web頁面效果。你也可以使用Theseus來檢查變量,Brackets默認提供一種主題,當然你也可以在擴展中心獲取更多的主題。

  • Emacs
    Emacs不僅僅是一個編輯器,他是一個整合環境,或可稱它為集成開發環境,這些功能如讓使用者置身于全功能的操作系統中。Emacs不僅可以作為文本編輯器,還可以用來收發電子郵件、通過FTP/TRAMP編輯遠程檔案、通過Telnet登錄主機、上新聞組、登陸IRC和朋友交流、查看日歷等功能。

  • Light Table
    LightTable是一個免費開放源代碼的編輯器,該編輯器有一個非常干凈的界面,并有大量擴展。它與Windows、Mac和Linux都兼容,是高度可定制的。使用Light Table,開發者只需打開一個瀏覽器窗口即可實時查看更改,并且支持不同的嵌入。

  • Chocolat
    Chocolat本身是Mac OS X的最佳代碼編輯器。該編輯器旨在與OS無縫集成,Chocolat為JS、Python和HTML提供拖放功能、拆分編輯、代碼折疊和代碼完成。

  • Sublime Text
    一個緊湊但性能較高的代碼編輯器一個跨平臺的代碼編輯器,適用于所有WordPress項目。 Sublime Text有很多功能可以提供: 腳本編程、自定義界面、常規文件切換、合成和錯誤檢測、多媒體選擇和編輯、外部插件集成、Themes

  • 彩色進度條:(藍底紅色#)

    test:test.c gcc -o test test.c .PHONY:clean clean: rm -f test vim test.c#include <stdio.h> #include <unistd.h> #include<string.h> int main() {int i = 0; char bar[101]; const char *lable = "|/-\\"; for(i=0;i<=100;i++) {bar[i]='\0'; printf("\033[1;31;44m%s\033[0m [%d%%][%c]\r",bar,i,lable[i%4]); fflush(stdout); bar[i]='#'; usleep(100000); } printf("\n"); return 0; }

    rpm和yum的區別:

  • rpm安裝
    rpm安裝:安裝別人編譯好的軟件包
    rpm即Redhat Package Manager,Redhat的軟件包管方式,適用rpm install 命令
    rpm不僅已經把軟件源代碼編譯成二進制文件,而且對軟件包依賴的文件,系統環境等做了統計文件擴展名:rpm
    還有一種SRPM:沒有編譯成二進制文件,但是也包含rpm的特性

  • yum安裝
    用rpm方式安裝軟件,如果依賴的軟件沒有事先安裝,軟件無法安裝成功。
    為了解決這個問題,推出yum方式。
    既然依賴的軟件沒有安裝在機器上,那么就先安裝依賴文件,再安裝我需要安裝的軟件。
    因此yum在安裝軟件同時安裝依賴文件。
    因此需要一個yum源來放依賴的軟件源,對比被安裝機器上rpm軟件庫歸根到底,yum也是基于rpm的。

  • 總結

    以上是生活随笔為你收集整理的Linux代码编译(模式切换、gdb、编译器之间的对比、彩色进度条、rpm与yum区别)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。