Linux常見工具如yum、vim、gcc、gdb的基本使用,以及編譯過程和動靜態鏈接的區別

目錄

一、工具的本質

二、一些常用的工具

1.yum

2.vim

1)vim的三種基本模式:

2)vim的基本操作

①命令模式下的基本操作:

②插入模式:

③底行模式:

3)vim的配置:讓他變得更好用

3.gcc/g++的使用

基本使用方法:

編譯過程

動靜態鏈接

4.gdb命令行調試

3)調試指令

?編輯

5.初識M/makefile

補充:系統是如何得知源文件是否未被修改的?文件屬性——三個時間

總結



一、工具的本質

工具在本質上也是一種特殊的指令

二、一些常用的工具

1.yum

常用選項:
yum list | grep 軟件名:搜安指定軟件;

yum install 軟件名:安裝指定軟件;

yum remove 軟件名:卸載指定軟件

提示:yum需要root權限,故一般處于root身份或者sudo安裝

示例:安裝sl小火車

①sudo yum install -y sl或則root身份下的yun install -y sl(-y即不要過多詢問直接安裝)

②sl(運行該軟件)

如果安裝成功,屏幕中會出現如下小火車。

不知道是普通用戶還是root?可用whoami指令查看

2.vim

介紹:Linux下的一款功能強大的編輯器(功能很多的記事本……)

使用方法:vim 先打開的文件名

1)vim的三種基本模式:

①命令模式:默認打開vim進入后所處的模式;

注意:在vim中的操作須在輸入法為英語環境下進行。

②底行模式:在命令模式下,按住shift + :即可進入底行模式

注意光標在哪

在底行模式輸入q再Enter可退出vim。

③插入模式:在命令模式下按鍵盤上的i鍵進入,進入后屏幕左下角會顯示“--INSERT--”字樣

在插入模式輸入內容后,保存須在底行模式輸入w再Enter

三種模式的切換:

命令模式+i==插入模式,插入模式按esc(鍵盤左上角)可退回命令模式;

命令模式+shit+:是底行模式,底行模式按esc(鍵盤左上角)可退回命令模式;

插入模式不能直接切換到底行模式,反之亦然,需要命令模式做中介。

畫的好丑,讀者見諒

在底行模式輸入!q再Enter可退出vim。

2)vim的基本操作

①命令模式下的基本操作:

????????光標定位:

? ? ? ? 文本編輯:

撤銷:u

撤銷撤銷:ctrl + r

②插入模式:

按期望編寫文件即可

③底行模式:

3)vim的配置:讓他變得更好用

3.gcc/g++的使用

若系統未安裝gcc或者g++先安裝:sudo yum install -y gcc或sudo yum install -y g++

基本使用方法:

gcc 源文件 -o 可執行文件名;g++?源文件 -o 可執行文件名。

①若有多個源文件則在gcc/g++后跟著列出即可,中間空格‘? ’隔開;

②-o:是為生成的可執行文件命名,若無-o則默認生成a.out

編譯過程

從源文件到可執行文件經過了如下幾個步驟:

①預處理:頭文件展開,宏定義替換,去注釋,條件編譯;

②編譯:將源文件編譯為匯編語言;

③匯編:將②中匯編語言進一步翻譯為二進制機器語言;

此時的二進制文件可以被機器執行嗎?

答:不能,在我們的代碼中只有函數的調用,如pringf、scanf等,沒有他們的實現!!他們的實現在C標準庫,還需要第五步鏈接!

④鏈接:將③中的二進制代碼與庫中代碼合并鏈接最后形成可執行程序。

什么庫?干嘛的?比如printf這個函數,我們在編寫代碼時只是調用了他,卻并沒有實現,他的實現在C標準庫中,即頭文件"stdio.h"

動靜態鏈接

在編譯過程中的第五步鏈接又分為動態鏈接和靜態鏈接:

如上述生成的hello可執行程序,若用file指令:file hello,在彈出的信息中可看到Linux系統采用了動態鏈接方式(大多數系統都是默認動態鏈接

4.gdb命令行調試

首先應該明確的是:在不同的開發環境調試的方式是不同的,但調試的思路一定是一樣的。

1)gdb的安裝:sudo yum install -y gdb

2)在Linux中gcc/g++默認生成的是release版本,若想調試應該在編譯時帶上-g,如:

這里插個題外話:為什么會有release和debug之分?

3)調試指令

5.初識M/makefile

拿上述的hello程序寫一個最簡單的makefile(在vim中編寫):

補充:系統是如何得知源文件是否未被修改的?文件屬性——三個時間

使用stat指令:stat hello可查看hello的詳細信息

其中有三個時間:

所以系統是如何得知源文件是否未被修改的呢?


總結

本篇文章主要介紹了yum、vim、gcc/g++以及gbd的基本使用方法,同時補充了程序的編譯過程和動靜態鏈接過程。筆者水平較淺薄,難免有疏忽大意的地方,若有錯誤還請讀者指出!!

文章讀完可否給筆者一個免費的贊呢,一個免費的點贊就能讓筆者高興很久哦。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/77552.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/77552.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/77552.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JavaScript 一維數組轉不含零的兩個數

問題描述&#xff1a; /*** param {number} n* return {number[]}*/ var getNoZeroIntegers function(n) {for(let i 1;i<n;i){if(String(i).indexOf(0) -1&&String(n-i).indexOf(0) -1){return [i,n-i]}}};String類型indexOf()函數如果找不到字串則返回-1&…

力扣DAY60-61 | 熱100 | 回溯:單詞搜索、分割回文串

前言 中等 √ 繼續回溯&#xff0c;不知咋地感覺這兩題有點難度&#xff0c;是因為隔一天就手感生疏了嗎&#xff1f; 單詞搜索 我的題解 定義方向數組、二維訪問數組。圖搜索&#xff0c;向上下左右每個方向搜索&#xff0c;需要更新的信息&#xff1a;坐標、是否遍歷過、…

超簡單的git學習教程

本博客僅用于記錄學習和使用 前提聲明全部內容全部來自下面廖雪峰網站&#xff0c;如果侵權聯系我刪除 0.前言 相信有不少人被推薦那個游戲學習git&#xff0c;一個不止我一個完全沒學習過的進去后一臉懵&#xff0c;半天都通不過一關然后就放棄了&#xff0c;我個人覺得那個…

【每日八股】復習 MySQL Day1:事務

文章目錄 復習 MySQL Day1&#xff1a;事務MySQL 事務的四大特性&#xff1f;并發事務會出現什么問題&#xff1f;MySQL 事務的隔離級別&#xff1f;不同事務隔離級別下會發生什么問題&#xff1f;MVCC 的實現原理&#xff1f;核心數據結構版本鏈構建示例可見性判斷算法MVCC 可…

在極狐GitLab 身份驗證中如何使用 OIDC?

極狐GitLab 是 GitLab 在中國的發行版&#xff0c;關于中文參考文檔和資料有&#xff1a; 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 使用 OpenID Connect 作為認證提供者 (BASIC SELF) 您可以使用極狐GitLab 作為客戶端應用程序&#xff0c;與 OpenID Connec…

PHP騰訊云人臉核身生成 SDK 接口調用步驟使用簽名

參考騰訊云官方文檔&#xff1a; 人臉核身 生成 SDK 接口調用步驟使用簽名_騰訊云 前提條件&#xff1a;成功獲取NonceTicket。 獲取參考文檔&#xff1a; PHP騰訊云人臉核身獲取NONCE ticket-CSDN博客 function getTxFaceSign(){$appId ;$userId ;$version 1.0.0;$tic…

每日一題算法——鏈表相交

鏈表相交 力扣題目鏈接 暴力解法:飄過 class Solution { public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode * cur headA;while(cur ! NULL){ListNode* curb headB;while(curb ! NULL){if(curbcur){return cur;}curb curb->next;}cu…

詳解Windows(一)——系統盤下目錄及文件詳解

引言 你是否曾經好奇過電腦里那些神秘的文件夾都是干什么用的&#xff1f;為什么有些文件是.exe而有些是.dll&#xff1f;不同的圖片格式.jpg和.png到底有什么區別&#xff1f;如果你對這些問題感到困惑&#xff0c;這篇文章就是為你準備的。今天&#xff0c;我們將以通俗易懂…

大模型賦能工業制造革新:10個顯效可落地的應用場景

在工業4.0的洶涌浪潮中&#xff0c;制造業正面臨著前所未有的轉型挑戰。傳統制造模式在效率、成本、質量等方面逐漸難以滿足市場需求&#xff0c;企業急需借助新技術實現數字化轉型&#xff0c;以提升自身競爭力。在此背景下&#xff0c;基于先進的數據分析技術、大模型、知識圖…

AI語音助手 React 組件使用js-audio-recorder實現,將獲取到的語音轉成base64發送給后端,后端接口返回文本內容

頁面效果&#xff1a; js代碼&#xff1a; import React, { useState, useRef, useEffect } from react; import { Layout, List, Input, Button, Avatar, Space, Typography, message } from antd; import { SendOutlined, UserOutlined, RobotOutlined, AudioOutlined, Stop…

pycharm無法識別到本地python的conda環境解決方法

問題一 現象描述&#xff1a; 本地已經安裝了conda&#xff0c;但在pycharm中選擇conda環境卻識別不到&#xff0c; 解決方法&#xff1a;手動輸入conda path&#xff0c;點擊R eload environments基本就能修復&#xff0c;比如我的路徑如下 /Users/test/conda/miniconda3/b…

PDK中technology file從tf格式轉換為lef格式

在數字后端流程中需要導入technology file工藝文件&#xff0c;一般傳統的PDK中都提供.tf形式&#xff0c;能夠在Synopsys ICC中進行導入。但是由于Cadence Innovus不斷地完善&#xff0c;更多的工程采用了其進行數字后端設計。不過Cadence Innovus導入的是.lef格式的工藝文件&…

UE虛幻4虛幻5動畫藍圖調試,觸發FellOutOfWorld事件和打印輸出,繼續DeepSeek輸出

找到了一個pdf&#xff0c;本來想寫個翻譯的&#xff0c;但還是算了&#xff0c;大概看了下&#xff0c;這類文檔很全面&#xff0c;內容很多&#xff0c;但都不是我要的&#xff0c;我想要一個動畫藍圖&#xff0c;搜索Montage&#xff0c;或者Anim 只占了一行&#xff08;幾百…

【Sa-Token】學習筆記05 - 踢人下線源碼解析

目錄 前言 強制注銷 踢人下線 源碼解析 前言 所謂踢人下線&#xff0c;核心操作就是找到指定 loginId 對應的 Token&#xff0c;并設置其失效。 上圖為踢人下線后&#xff0c;前端應該用圖像給出來讓用戶重新登錄&#xff0c;而不是讓前端收到一個描述著被下線 的JSON 強…

C語言==》字符串斷行

示例代碼 #include <stdio.h>int main(void) {printf("Heres one way to print a ");printf("long string.\n");printf("Heres another way to print a \ long string.\n");printf("Heres the newest way to print a ""lo…

Linux | I.MX6ULL 文件系統

01 本節所有的測試程序需要開發板有 Qt 環境來運行。我們提供的文件系統是由 yocto 裁剪整理得來的。之后我們會整理一份單獨移植的 qt 系統。方便用戶移植第三方軟件。如果用戶的文件系統非我們的出廠版本,請參考之前燒寫章節重新燒寫出廠文件系統。開發板啟動需要輸入登錄…

網絡原理 - 應用層, 傳輸層(UDP 和 TCP) 進階, 網絡層, 數據鏈路層 [Java EE]

目錄 應用層 1. 應用層的作用 2. 自定義應用層協議 3. 應用層的 "通用協議格式" 3.1 xml 3.2 json 3.3 protobuffer (pd) 傳輸層 1. UDP 1.1 無連接 1.2 不可靠傳輸 1.3 面向數據報 1.4 全雙工 1.5 緩沖區 1.6 UDP 數據報 2. TCP 2.1 有連接 …

如何將自己封裝的組件發布到npm上:詳細教程

如何將自己封裝的組件發布到npm上&#xff1a;詳細教程 作為前端開發者&#xff0c;我們經常從npm&#xff08;Node Package Manager&#xff09;上下載并使用各種第三方庫和組件。然而&#xff0c;有時候我們可能會發現自己需要的功能在npm上并不存在&#xff0c;或者我們希望…

[OS_7] 訪問操作系統對象 | offset | FHS | Handle

實驗代碼可以看去年暑假的這篇文章&#xff1a;【Linux】進程間通信&#xff1a;詳解 VSCode使用 | 匿名管道 我們已經知道&#xff0c;進程從 execve 后的初始狀態開始&#xff0c;可以通過 mmap 改變自己的地址空間&#xff0c;通過 fork 創建新的進程&#xff0c;再通過 exe…

關于TCP三次握手和四次揮手過程中的狀態機、使用三次握手和四次揮手的原因、擁塞控制

關于傳輸層中的TCP協議&#xff0c;我們在之前的博客中對其報文格式、三次握手、四次揮手、流量控制、數據傳輸等機制進行了具體說明&#xff0c;接下來在前面所學的基礎上&#xff0c;我們再來講講TCP中三次握手和四次揮手各階段所處的狀態機以及為什么要使用三次握手和四次揮…