3.基礎開發工具

1.軟件包管理器

1.1什么是軟件包

? 在Linux下安裝軟件, ?個通常的辦法是下載到程序的源代碼, 并進?編譯, 得到可執?程序.
? 但是這樣太?煩了, 于是有些?把?些常?的軟件提前編譯好, 做成軟件包(可以理解成windows上
的安裝程序)放在?個服務器上, 通過包管理器可以很?便的獲取到這個編譯好的軟件包, 直接進?安
裝.
? 軟件包和軟件包管理器, 就好? "App" 和 "應?商店" 這樣的關系.
? yum(Yellow dog Updater, Modified)是Linux下?常常?的?種包管理器. 主要應?在Fedora,
RedHat, Centos等發?版上.
? Ubuntu:主要使?apt(Advanced Package Tool)作為其包管理器。apt同樣提供了?動解決依
賴關系、下載和安裝軟件包的功能。

1.2Linux軟件生態(重要)?

1.3yum具體操作?

?1.查看軟件包:

通過 yum list 命令可以羅列出當前?共有哪些軟件包. 由于包的數?可能?常之多, 這?我們需要使?grep 命令只篩選出我們關注的包。
2.安裝軟件:sudo yum install -y 。。。
? yum/apt 會?動找到都有哪些軟件包需要下載, 這時候敲 "y" 確認安裝.
? 出現 "complete" 字樣或者中間未出現報錯, 說明安裝完成.
注意事項:
? 安裝軟件時由于需要向系統?錄中寫?內容, ?般需要 sudo 或者切到 root 賬?下才能完成.
? yum/apt安裝軟件只能?個裝完了再裝另?個. 正在yum/apt安裝?個軟件的過程中, 如果再嘗試?
yum/apt安裝另外?個軟件, yum/apt會報錯.
? 如果 yum / apt報錯, 請??百度.

3.卸載軟件:sudo yum remove [-y] lrzsz(windows與Linux之間互傳文件的軟件)

2.編譯器Vim

?1.vim的基本概念:
vim有好多種模式(主要三種):1.命令模式(command mode). 2.插入模式(insert mode). 3.底行模式(last line mode)

?2.vim命令集

?

?:!? 不用退出vim就可以進行指令。??

Ctrl + w + w多個分屏間循環移動光標;Ctrl + w + l:把光標移到右邊的分屏;Ctrl + w + h:把光標移到左邊的分屏

shift+z+z : 快捷鍵保存并退出

3.vim配置

3.編譯器gcc/g++

背景知識
1. 預處理(進?宏替換/去注釋/條件編譯/頭?件展開等)
2. 編譯(?成匯編)
3. 匯編(?成機器可識別代碼)
4. 連接(?成可執??件或庫?件)

?

?

?ldd:用于顯示可執行程序或動態鏈接庫所依賴的其他共享庫。

2.動態鏈接和靜態鏈接:

1.在我們的實際開發中,不可能將所有代碼放在?個源?件中,所以會出現多個源?件,?且多個源? 件之間不是獨?的,?會存在多種依賴關系,如?個源?件可能要調?另?個源?件中定義的函數, 但是每個源?件都是獨?編譯的,即每個*.c?件會形成?個*.o?件,為了滿?前?說的依賴關系,則 需要將這些源?件產?的?標?件進?鏈接,從?形成?個可以執?的程序。這個鏈接的過程就是靜態鏈接。靜態鏈接的缺點很明顯:

? 浪費空間:因為每個可執?程序中對所有需要的?標?件都要有?份副本,所以如果多個程序對
同?個?標?件都有依賴,如多個程序中都調?了printf()函數,則這多個程序中都含有
printf.o,所以同?個?標?件都在內存存在多個副本;
? 更新?較困難:因為每當庫函數的代碼修改了,這個時候就需要重新進?編譯鏈接形成可執?程
序。但是靜態鏈接的優點就是,在可執?程序中已經具備了所有執?程序所需要的任何東西,在
執?的時候運?速度快。

?2.動態鏈接的出現解決了靜態鏈接中提到問題。動態鏈接的基本思想是把程序按照模塊拆分成各個相對獨?部分,在程序運?時才將它們鏈接在?起形成?個完整的程序,?不是像靜態鏈接?樣把所有程序模塊都鏈接成?個單獨的可執??件。動態鏈接其實遠?靜態鏈接要常?得多。

3.靜態庫和動態庫

? 我們的C程序中,并沒有定義“printf”的函數實現,且在預編譯中包含的“stdio.h”中也只有該
函數的聲明,?沒有定義函數的實現,那么,是在哪?實“printf”函數的呢?
? 最后的答案是:系統把這些函數實現都被做到名為 libc.so.6 的庫?件中去了,在沒有特別指定
時,gcc 會到系統默認的搜索路徑“/usr/lib”下進?查找,也就是鏈接到 libc.so.6 庫函數中去,這樣
就能實現函數“printf”了,?這也就是鏈接的作?

?1.靜態庫是指編譯鏈接時,把庫?件的代碼全部加?到可執??件中,因此?成的?件?較?,但在運 ?時也就不再需要庫?件了。其后綴名?般為“.a ”

2.動態庫與之相反,在編譯鏈接時并沒有把庫?件的代碼加?到可執??件中,?是在程序執?時由 運?時鏈接?件加載庫,這樣可以節省系統的開銷。動態庫?般后綴名為“.so”,如前?所述的 libc.so.6 就是動態庫。gcc 在編譯時默認使?動態庫。完成了鏈接之后,gcc 就可以?成可執?? 件。

3.gcc默認?成的?進制程序,是動態鏈接的,這點可以通過 file 命令驗證。

4.自動化構建-make/Makefile

1.背景

? ?個?程中的源?件不計數,其按類型、功能、模塊分別放在若?個?錄中,makefile定義了?
系列的規則來指定,哪些?件需要先編譯,哪些?件需要后編譯,哪些?件需要重新編譯,甚?
于進?更復雜的功能操作? makefile帶來的好處就是?“?動化編譯”,?旦寫好,只需要?個make命令,整個?程完全
?動編譯,極?的提?了軟件開發的效率。? make是?個命令?具,是?個解釋makefile中指令的命令?具,?般來說,?多數的IDE都有這
個命令,?如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可?,makefile
都成為了?種在?程??的編譯?法。? make是?條命令,makefile是?個?件,兩個搭配使?,完成項??動化構建。
myproc:myproc.cgcc -o myproc myproc.c
.PHONY:clean
clean:rm -f myproc//注:這里的間距必須用tab

2.基本使用?

?3.進一步理解

1. make會在當前?錄下找名字叫“Makefile”或“makefile”的?件。2.如果 myproc 所依賴的 myproc.o ?件不存在,那么 make 會在當前?件中找?標為
myproc.o ?件的依賴性,如果找到則再根據那?個規則?成 myproc.o ?件。(這有點像?
個堆棧的過程)3.這就是整個make的依賴性,make會?層??層地去找?件的依賴關系,直到最終編譯出第?個
?標?件。4.make只管?件的依賴性,即,如果在我找了依賴關系之后,冒號后?的?件還是不在,那么對
不起,我就不?作啦。

1.wildcard函數:
這是 Makefile 中的一個內置函數:用于展開為當前目錄下所有符合模式的文件列表
如:模式是*.c,所以$(wildcard *.c)會查找當前目錄下所有擴展名為.c的文件,
并將這些文件名組成一個列表賦值給變量SRC。
例如,如果當前目錄下有main.c、utils.c兩個 C 源文件,那么SRC的值就會是main.c utils.c。2.OBJ=$(SRC:.c=.o)
變量替換語法:將變量SRC中所有文件名的后綴.c替換為.o。

?

*5.Linux第一個程序-進度條

預備知識:0.int a = 123456;
printf("%d", a);在顯示器上它并不是整數而是字符串1.回車換行問題:
回車換行(\n)不是一個概念:它是先回到該行的最前面(\r),再換行.2.用戶緩沖區問題:
示例:
#include<stdio.h>
#include<unistd.h>
int main()
{printf("hello world");sleep(2);return 0;
}//現象是先休眠兩秒,再出現hello world但是程序執行的順序一定是從上到下,那在sleep時,hello world字符串哪去了?
答:在C語言緩沖區中!!!
緩沖區刷新我們才能看到之前存儲在緩沖區里的內容緩沖區刷新策略:
1.\nor\r\n,\n之前所有內容,全部刷新到顯示器
2.程序退出的時候,曾經的歷史數據,會被刷新
3.我們還可以強制刷新看到:int fflush(FILE *stdout)
【extern FILE *stdout (標準輸出->顯示器)】

可以直接從之前寫好的mv過來?

./count(用于運行當前目錄下名為?count?的可執行文件," ./ " 表示當前目錄)?

改進后若把9改為10,則10,90,80...(側面說明了打到顯示器上的是字符串不是整數,所以往前覆蓋時只蓋住了1,而不是10)

cat *(*是通配符,代表當前目錄下所有文件) ;vs 文件(分屏操作)

cp ../Makefile .? (將上一級目錄中的?Makefile?文件復制到當前所在的目錄中);

cp?用于復制文件或目錄的命令;?

  • ../Makefile?指的是當前目錄上一級目錄中的名為?Makefile?的文件。
  • .?表示目標位置,這里的?.?代表當前目錄。

man 用于查找命令的用法

?這里當rate超過100要手動修改一下等于100,不然會導致越界!!!ovo

6.版本控制器Git

1.理解git的作用

為了能夠更?便我們管理不同版本的?件,便有了版本控制器。所謂的版本控制器,就是能讓你了解到?個?件的歷史,以及它的發展過程的系統。通俗的講就是?個可以記錄?程的每?次改動和版本迭代的?個管理系統,同時也?便多?協同作業。

?2. 將linux代碼提交到git上:

?3.gitignore(忽略次要文件)

4.git status(用于查看當前工作目錄和暫存區的狀態)

git status命令能清晰顯示哪些文件被修改、哪些文件是新增的、哪些文件被刪除,以及哪些文件已被添加到暫存區等待提交等信息,幫助開發者隨時掌握倉庫的狀態。

5.git pull(將更新同步到本地倉庫,保證本地代碼與遠程倉庫代碼一致)

6.git log(以倒序的方式顯示所有提交記錄)

.......git還有很多知識,會單獨出一章。。。

7.調試器 - gdb/cgdb使用

1.基本了解

? 程序的發布?式有兩種, debug 模式和 release 模式, Linux gcc/g++ 出來的?進制程
序,默認是 release 模式。? 要使?gdb調試,必須在源代碼?成?進制程序的時候, 加上 -g 選項,如果沒有添加,程序?法被
編譯1.Debug:程序員自己用,添加調試信息的
2.Release:給別人的,用戶,測試,不添加調試信息的

?grep文本搜索工具

2.調試命令--cgdb

調試的本質:定位問題!!!list/l 行號0:查看代碼
b 行號:打斷點
info b:查看斷點
d 斷點編號:刪除

?退出:ctrl + dquit

?找問題時可以用二分查找的策略

3.調試技巧?

1.watch / 條件斷點

注意:
? 條件斷點添加常?兩種?式:1. 新增 2. 給已有斷點追加
? 注意兩者的語法有區別,不要寫錯了。
? 新增: b ?號/?件名:?號/函數名 if i == 30(條件)
? 給已有斷點追加:condition 2 i==30, 其中2是已有斷點編號,沒有if

?2.set var確定問題原因

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

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

相關文章

Golang errors 包快速上手

文章目錄 1.變量2.類型3.函數3.1 New3.2 Is簡介函數簽名核心功能示例代碼使用場景注意事項小結 3.3 As簡介函數簽名核心功能示例代碼使用場景注意事項小結 3.4 Unwrap簡介函數簽名核心功能使用示例使用場景注意事項小結 3.5 Join簡介函數簽名核心功能使用場景注意事項小結 4.小…

Java File 類詳解

Java File 類詳解 File 類是 Java 中用于表示文件和目錄路徑名的抽象類&#xff0c;位于 java.io 包中。它提供了豐富的 API&#xff0c;用于操作文件系統&#xff0c;包括創建、刪除、重命名、查詢文件屬性等功能。 1. File 類核心知識點 &#xff08;1&#xff09;構造方法…

基于javaweb的SpringBoot兒童愛心管理系統設計與實現(源碼+文檔+部署講解)

技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論文…

Unity Nav Mesh導航系統的簡單使用

標題 1.下載。2.面板位置3.object面板4.Area面板5.Bake面板6.Agent面板7.Nav Mesh Agent組件8.Nav Mesh Obstacle組件9.簡單使用 1.下載。 unity2022以上版本要去packageManager中下載。 2.面板位置 3.object面板 Navigation Static&#xff1a;設置該物體是否被列入靜態尋路…

FairyGUI圖標文字合批失敗的原因

1&#xff09;FairyGUI圖標文字合批失敗的原因 2&#xff09;為什么Cubemap的內存占用超高 3&#xff09;如何找到網格某個切面的中心點 4&#xff09;為什么SafeZone在倒屏后方向相反 這是第428篇UWA技術知識分享的推送&#xff0c;精選了UWA社區的熱門話題&#xff0c;涵蓋了…

[BUG]Cursor C++擴展不支持

本文內容組織形式 問題描述失效原因解決方案使用野版C Extension 猜你喜歡結語 問題描述 日期&#xff1a;20250419 操作系統&#xff1a; mac C代碼沒有辦法進行跳轉&#xff0c;并且和以前的文本標亮也不同 并且還有如下問題彈窗 C/C 擴展只能與 Microsoft Visual Studio…

深?理解 JVM 執?引擎

深?理解 JVM 執?引擎 其中前端編譯是在 JVM 虛擬機之外執?&#xff0c;所以與 JVM 虛擬機沒有太?的關系。任何編程語?&#xff0c;只要能夠編譯出 滿? JVM 規范的 Class ?件&#xff0c;就可以提交到 JVM 虛擬機執?。?于編譯的過程&#xff0c;如果你不是想要專?去研…

Ubuntu 部署 DeepSeek

在 Ubuntu 系統上部署 DeepSeek 模型&#xff0c;能讓用戶利用其強大的人工智能能力&#xff0c;同時保障數據的安全性與操作的自主性。不過&#xff0c;這一過程涉及諸多技術細節&#xff0c;需要謹慎操作。以下將為你詳細介紹在 Ubuntu 系統部署 DeepSeek 的操作步驟及注意事…

通義靈碼 Rules 庫合集來了,覆蓋Java、TypeScript、Python、Go、JavaScript 等

通義靈碼新上的外掛 Project Rules 獲得了開發者的一致好評&#xff1a;最小成本適配我的開發風格、相當把團隊經驗沉淀下來&#xff0c;是個很好功能…… 那么有哪些現成的 Rules 可以抄作業呢&#xff0c;今天我們官方輸出了 Java、TypeScript、Python、Go、JavaScript 等語…

山東大學軟件學院項目實訓-基于大模型的模擬面試系統-Token過期重定向問題

項目結構 ├── assets/ # 靜態資源&#xff08;CSS/圖片&#xff09; ├── components/ # Vue 組件 ├── layouts/ # 布局模板 ├── pages/ # 自動生成路由 ├── plugins/ # 插件&#xff08;如 axios 攔截器&#xff09; …

SAP案例:珠海漢勝科技SAP S/4 HANA智能制造實踐與價值實現

客戶簡介 珠海漢勝科技股份有限公司為高科技生產企業&#xff0c;成立于1985年&#xff0c;擁有員工近2000人。主要從事生產、銷售、研發&#xff1a;光纖光纜、電線、電纜及附件、鋁塑復合管&#xff1b;光纖光纜、電纜、電線生產項目的策劃及技術咨詢。它致力于為國內外無線電…

Spring Boot 項目中發布流式接口支持實時數據向客戶端推送

1、pom依賴添加 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency>2、事例代碼 package com.pojo.prj.controller;import com.pojo.common.core.utils.String…

Zookeeper 可觀測性最佳實踐

Zookeeper 介紹 ZooKeeper 是一個開源的分布式協調服務&#xff0c;用于管理和協調分布式系統中的節點。它提供了一種高效、可靠的方式來解決分布式系統中的常見問題&#xff0c;如數據同步、配置管理、命名服務和集群管理等。本文介紹通過 DataKit 采集 Zookeeper 指標&#…

【安全】DVWA靶場滲透

【安全】DVWA靶場滲透 備注一、環境搭建二、弱口令&#xff08;Brute Force&#xff09;三、命令注入&#xff08;Command Injection&#xff09;四、CSRF&#xff08;Cross Site Request Forgery&#xff09;五、文件包含&#xff08;File Inclusion&#xff09;六、文件上傳&…

Ubuntu22.04安裝QT、px4安裝環境

Ubuntu22.04安裝QGC編譯環境、QT、px4編譯環境 參考文檔版本說明安裝QGC安裝Ubuntu安裝QT配置px4安裝環境出現錯誤怎么辦 參考文檔 PX4 1.15 User Guide 版本說明 PX4&#xff1a;1.15.4 QGC&#xff1a; 安裝QGC 我使用的是pixhawk V5飛控&#xff0c;在QGC4.4 Guide里&a…

積木報表查詢出現jdbc.SQLServerException: 對象名 ‘user_tab_comment 的解決方法

目錄 前言1. 問題所示2. 解決方法前言 ?? 找工作,來萬碼優才:?? #小程序://萬碼優才/r6rqmzDaXpYkJZF 爬蟲神器,無代碼爬取,就來:bright.cn 1. 問題所示 使用帆軟報表無錯,后續使用積木報表查詢出錯: 沒有顯示報表: 具體錯誤信息如下:

c++基礎·左值右值

一、左值與右值的本質特征 1. 基礎定義 左值 (lvalue) ? 可出現在賦值運算符左側 ? 可被取地址&#xff08;有明確存儲位置&#xff09; ? 通常為具名變量&#xff08;如int a 10;中的a&#xff09; 右值 (rvalue) ? 不可出現在賦值左側 ? 不可取地址&#xff08;無持久…

【Rust 精進之路之第9篇-所有權·核心】規則與移動 (Move):Rust 內存安全基石詳解

系列: Rust 精進之路:構建可靠、高效軟件的底層邏輯 作者: 碼覺客 發布日期: 2025年4月20日 引言:沒有 GC,Rust 如何管好內存?答案是所有權! 在我們的 Rust 探索之旅中,我們已經學習了變量、數據類型、控制流、函數和強大的構建工具 Cargo。現在,我們將踏入 Rust 最…

嵌入式學習——opencv圖像庫編程

環境配置 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一個開源的計算機視覺和圖像處理庫&#xff0c;廣泛用于各種計算機視覺任務&#xff0c;如圖像處理、視頻分析、人臉識別、物體檢測、機器學習等。它提供了豐富的函數和工具&#xff0c;用于處理…

一招破敵,掌控 React 渲染術:createRoot 與 root.render

前言 在這數字江湖中,前端門派百花齊放,React 一門尤為奇特,講究“以虛制實,以組件馭天下”。眼下你我初入江湖,第一關便是掛載組件之術。倘若不懂 createRoot 與 root.render,那就像一個新晉小俠,連起手式都沒學會,點穴還沒碰到 DOM,自己先內傷三分。 來吧,少年!…