Linux環境開發工具

Linux軟件包管理器yum

Linux下安裝軟件方式:

  1. 源代碼安裝
  2. rpm安裝——Linux安裝包
  3. yum安裝——解決安裝源、安裝版本、安裝依賴的問題

yum對應于Windows系統下的應用商店
使用Linux系統的人:大部分是職業程序員

客戶端怎么知道去哪里下載軟件?
Linux生態:

  1. 開源(一種商業戰略)
  2. 開源不等于免費

選操作系統的標準:生態好(使用者的角度)

站在OS的設計者和推動者,他們應該做什么?

提供云服務器和軟件服務

安裝rzsz

Windows和Linux下消息互傳

yum list |grep lrzsz
yum install lrzsz.x86_64
yum remove -y lrzsz.x86_64#-y:是否詢問

yum怎么知道去哪里下載?

yum內置下載鏈接

yum install -y epel-release#擴展yum源

Linux編輯器-vim使用

vim:文本編寫——寫代碼(多模式編輯器)

命令模式(默認模式):用戶所有的輸入都會被當作命令,一般不會作為文本輸入

在這里插入圖片描述

命令模式下光標定位

gg:定位光標到最開始行

G:定位光標到最結尾行

n+G:定位光標到第n行

(n)yy:復制光標所在行(后n行)

(n)p:粘貼(n重復行)到光標所在下一行

(n)dd:剪切、刪除(n行)

u:撤銷命令

ctrl+r:撤銷之前的撤銷

$:定位光標到當前行結尾

^:定位光標到當前行開始

w、b:光標按照單詞進行行內、跨行移動

h、j、k、l:光標按左、下、上、右移動

~:對光標所在字符進行大小寫轉換

(n)r:對光標及其之后共n個字符替換為新的字符(需輸入)

R:替換模式,對光標所在內容進行重新輸入

(n)x:對光標及其之后的字符進行刪除,共刪除n位

底行模式下命令

多文件如何處理?

vs+文件名:打開另一個文件編輯窗口

ctrl+ww:窗口光標切換

光標在哪一個窗口里面,就對哪一個窗口進行操作。

w!:強制保存

q!:強制退出

set nu:調出行號

set nonu:去掉行號

vim的簡單配置

touch .vimrc
vim .vimrc
#一個用戶一個vim配置文件,不會互相影響,不建議給root做配置

給普通用戶添加白名單

sudo#新建的普通用戶無法sudo,必須添加到白名單
#在root下操作
ll /etc/sudoers
#在/etc/sudoers中root    ALL=(ALL)       ALL下方添加
#用戶名    ALL=(ALL)       ALL

在這里插入圖片描述

Linux編譯器-gcc/g++使用

gcc mycode.c#用來編譯C語言
g++ mycode.cpp#用來編譯CPP

背景知識

為什么在windows或Linux上能編譯運行對應的源文件?

需要在系統中提前安裝C/C++開發相關的頭文件、庫文件

C/C++開發環境不僅僅指的是vs、gcc、g++,更重要的是語言本身的頭文件和庫文件。

安裝vs,要選擇對應的開發包,同步也在下載對應的頭文件和庫文件

編譯型語言安裝開發包一定需要下載對應的頭文件和庫文件

ls /usr/include/#linux下頭文件和庫文件所在位置

程序運行過程

  1. 預處理
gcc -E mycode.c -o mycode.i#生成.i文件
  • 去注釋
  • 頭文件展開
  • 條件編譯
#ifndef
#else
#endif
  • 宏替換

條件編譯的應用場景:

提供社區版和專業版的軟件公司,需要維護兩份代碼嗎?

不需要!根據不同的編譯條件,在專業版裁減掉社區版不需要的功能即可。

  1. 編譯(生成匯編)
gcc -S mycode.c -o mycode.s#生成.s文件
  1. 匯編(生成機器可識別代碼)
gcc -c mycode.s -o mycode.o#生成mycode.o文件
od mycode.o#查看二進制文件內容
#mycode.o:可重定位目標二進制文件,簡稱目標文件,windows下的obj文件,不可以獨立執行,需要經過鏈接后才能執行
  1. 鏈接(生成可執行文件或庫文件)
gcc mycode.o -o mytest#直接生成可執行文件mytest
#將可重定位目標二進制文件和庫文件進行鏈接才能形成可執行程序

動態庫&&靜態庫

Linux下:.so(動態庫)、.a(靜態庫)

Windows下:.dll(動態庫)、.lib(靜態庫)

庫有自己的命名規則:libname.so.XXX

機器默認值只會安裝動態庫

庫其實就是把愿望呢間經過一定的翻譯,然后打包——只給你提供一個文件即可,不用給你提供太多的源文件,也可以達到隱藏源文件的目的。

頭文件提供方法的聲明+庫文件提供方法的實現+你的代碼=你的軟件

庫的價值:不讓我們做重復動作

我們的.o和庫是如何鏈接的?

動態鏈接

動態庫(共享庫)

動態庫不能缺失,一旦對應的動態庫缺失,影響的不止一個程序,可能導致很多程序都無法正常運行。

ldd mytest#查看可執行程序依賴的動態庫

靜態鏈接

在編譯器使用靜態庫進行靜態鏈接的時候,會將自己的方法拷貝到目標程序中,該程序以后不會再依賴靜態庫

gcc mycode.c -o mytest
ldd mytest
#在Linux中,編譯形成可執行程序,默認采用的就是動態鏈接,提供動態庫
gcc mycode.c -o mytest -static#靜態鏈接(體積變大)
#在Linux中,如果要采用靜態鏈接的方式形成可執行程序,需要添加-static選項

centos yum安裝C/C++靜態庫

sudo yum install -y glibc-static
sudo yum install -y libstdc++-static
  1. 如果沒有靜態庫,能否執行-static?

不能

  1. 如果沒有動態庫,但是有靜態庫,而且gcc能找到?

gcc mycode.c -o mytest也可以運行,gcc默認優先動態鏈接

-static的本質:改變鏈接優先級

  1. 可執行程序不一定全是動態鏈接或者靜態鏈接,可能都包括。

  2. 如果加-static,所有的鏈接要求都需要是靜態鏈接

動靜態鏈接的優缺點

動態庫:

優點:動態庫是共享庫,可以有效的節省資源(磁盤空間、內存空間、網絡空間)

缺點:動態庫一旦缺失,會導致各個程序無法運行

靜態庫:

優點:靜態庫不依賴庫,程序可以獨立運行

缺點:體積大,比較消耗資源

Linux項目自動化構建工具-make/Makefile

make是一條指令

Makefile是當前目錄下的一個文件

mycode: mycode.c#依賴關系gcc -o mytest mycode.c#依賴方法clean:rm -f mycode
  1. 依賴關系+依賴方法

make會自動推導Makefile中的依賴關系(棧式結構)

  1. 為什么只能make一次?

沒有必要多次make,提高我們的編譯效率

怎么做到的?

比較源文件和可執行程序的Modify(最近修改)時間

源文件形成可執行文件。

先有源文件,才有可執行。一般而言,源文件的Modify時間要比可執行的Modify時間早

如果我們更改了源文件,歷史上還有可執行,那么源文件的Modify一定比可執行晚。

stat mytest#查看mytest的文件時間
#Access:文件被訪問
#Change:文件屬性被修改
#Modify:文件內容被修改
touch mytest#mytest已存在,把mytest的所有時間更新成最新的

make會根據源文件和可執行的新舊,判斷是否需要重新執行依賴關系進行編譯!

mycode: mycode.cgcc -o $@ $^
#$@:目標文件
#$^:源文件.PHONY:clean#偽目標,總是被執行
clean:rm -f mycode

使用git命令行

什么是git?

具有網絡功能的版本控制器(開源)

client和server是一體的

本地倉庫+遠端倉庫

git如何使用?

yum install git
git clone 鏈接
git add mycode
git commit -m "自己的練習代碼"
git push

git的其他問題

git log#提交日志
git status#提交狀態
#.gitignore

Linux調試器-gdb使用

debug&&release

debug可以被追蹤、調試,形成可執行程序的時候會有調試信息

gcc默認編譯是release方式發布的,不能直接調試

如果要以debug方式發布,必須攜帶-g選項

gcc -o mytest mycode.c -g

要被gdb調試,必須以debug方式發布

gdb命令

gdb mycode.c#開始調試mycode.c
q#退出調試,退出后上次調試信息會自動被清理掉
l 行號#顯示源代碼,每次列10行(行號所在位置在中間)
l 函數名#列出某個函數的源代碼。
r#運行程序
b 行號#在行號打斷點
info b#查看斷點信息
d 斷點編號#刪除對應的斷點信息
b 文件:行號#在對應文件行號打斷點
n#逐過程
s#逐語句
p 變量#查看變量的信息
display 變量#常顯示變量的信息
undisplay 編號#取消編號對應的常顯示
until 行號#調試轉到對應的行、快速跳過函數代碼快
finish#結束當前函數的調試
c#跳到下一個斷點
disable 斷點編號#禁用斷點
undisable 斷點編號#啟用斷點
set 變量#設置變量的值
bt#查看各級函數調用及參數
info locals#查看當前棧幀局部變量的值

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

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

相關文章

自動化辦公|通過xlwings進行excel格式設置

1. 介紹 xlwings 是一個強大的 Python 庫,可以用來操作 Excel,包括設置單元格格式、調整行高列寬、應用條件格式以及使用內置樣式。本文將詳細介紹如何使用 xlwings 進行 Excel 格式化操作,并附帶代碼示例。 2. 基礎格式設置(字…

EasyRTC:智能硬件適配,實現多端音視頻互動新突破

一、智能硬件全面支持,輕松跨越平臺障礙 EasyRTC 采用前沿的智能硬件適配技術,無縫對接 Windows、macOS、Linux、Android、iOS 等主流操作系統,并全面擁抱 WebRTC 標準。這一特性確保了“一次開發,多端運行”的便捷性&#xff0c…

【架構思維基礎:如何科學定義問題】

架構思維基礎:如何科學定義問題 一、問題本質認知 1.1 問題矛盾 根據毛澤東《矛盾論》,問題本質是系統內部要素間既對立又統一的關系。例如: 電商系統矛盾演變: 90年代:商品供給不足 vs 消費需求增長00年代&#x…

從零開始構建一個小型字符級語言模型的詳細教程(基于Transformer架構)之一數據準備

最近特別火的DeepSeek,是一個大語言模型,那一個模型是如何構建起來的呢?DeepSeek基于Transformer架構,接下來我們也從零開始構建一個基于Transformer架構的小型語言模型,并說明構建的詳細步驟及內部組件說明。我們以構建一個字符級語言模型(Char-Level LM)為例,目標是通…

Effective Go-新手學習Go需要了解的知識

不知不覺從事Golang開發已有4+年了,回顧自己的成長經歷,有很多感悟和心得。如果有人問我,學習Golang從什么資料開始,我一定給他推薦"Effective Go"。《Effective Go》是 Go 語言官方推薦的編程風格和最佳實踐指南,其結構清晰,內容涵蓋 Go 的核心設計哲學和常見…

坐井說天闊---DeepSeek-R1

前言 DeepSeek-R1這么火,雖然網上很多介紹和解讀,但聽人家的總不如自己去看看原論文。于是花了大概一周的時間,下班后有進入了研究生的狀態---讀論文。 DeepSeek這次的目標是探索在沒有任何監督數據的情況下訓練具有推理能力的大模型&#…

MySQL(1)基礎篇

執行一條 select 語句,期間發生了什么? | 小林coding 目錄 1、連接MySQL服務器 2、查詢緩存 3、解析SQL語句 4、執行SQL語句 5、MySQL一行記錄的存儲結構 Server 層負責建立連接、分析和執行 SQL存儲引擎層負責數據的存儲和提取。支持InnoDB、MyIS…

IntelliJ IDEA 接入 AI 編程助手(Copilot、DeepSeek、GPT-4o Mini)

IntelliJ IDEA 接入 AI 編程助手(Copilot、DeepSeek、GPT-4o Mini) 📊 引言 近年來,AI 編程助手已成為開發者的高效工具,它們可以加速代碼編寫、優化代碼結構,并提供智能提示。本文介紹如何在 IntelliJ I…

2025.2.20總結

今晚評測試報告,評到一半,由于看板數據沒有分析完,最后讓我搞完再評. 盡管工作了多年的同事告訴我,活沒干完,差距比較大,沒資格評報告,但還是本著試試的態度,結果沒想到評審如此嚴苛…

ok113i——交叉編譯音視頻動態庫

提示:buildroot支持ffmpeg和SDL,但博主的ffmpeg是按下面方法編譯通過,SDL使用buildroot直接編譯也通過; 1. 下載ffmpeg源碼 下載鏈接:https://github.com/FFmpeg/FFmpeg/tags 根據版本需要自行下載壓縮包&#xff0c…

什么叫不可變數據結構?

不可變數據結構(Immutable Data Structures)是指一旦創建之后,其內容就不能被修改的數據結構。這意味著任何對不可變數據結構的“修改”操作實際上都會返回一個新的數據結構,而原始數據結構保持不變。 一、不可變數據結構的核心特點 不可變性:一旦創建后,數據結構的內容…

深度學習之圖像分類(一)

前言 圖像回歸主要是對全連接進行理解 而圖像分類任務主要是對卷積的過程進行理解 這一部分會介紹一些基礎的概念 卷積的過程(包括單通道和多通道) 理解一個卷積神經網絡工作的過程 以及常見的模型的類別和創新點 圖像分類是什么 定義 圖像分類是指將輸…

AutoDock CrankPep or ADCP進行蛋白質多肽對接

需求描述 使用AutoDock CrankPep or ADCP進行蛋白質多肽對接 硬件及系統配置 自用電腦型號如下: 電腦:Precision Tower 7810 (Dell Inc.) CPU : Intel Xeon CPU E5-2686 v4 2.30GHz GPU: NVIDIA GeForce GTX 1070 Linux版本&a…

Django 5實用指南(二)項目結構與管理

2.1 Django5項目結構概述 當你創建一個新的 Django 項目時,Django 會自動生成一個默認的項目結構。這個結構是根據 Django 的最佳實踐來設計的,以便開發者能夠清晰地管理和維護項目中的各種組件。理解并管理好這些文件和目錄結構是 Django 開發的基礎。…

LabVIEW利用CANopen的Batch SDO寫入

本示例展示了如何通過CANopen協議向設備寫入Batch SDO(批量服務數據對象)。Batch SDO允許用戶在一次操作中配置多個參數,適用于設備的批量配置和參數設置。此方法能夠簡化多個參數的寫入過程,提高設備管理效率。 主要步驟&#xf…

WPF9-數據綁定進階

目錄 1. 定義2. 背景3. Binding源3.1. 使用Data Context作為Binding的源3.2. 使用LINQ檢索結果作為Binding的源 4. Binding對數據的轉換和校驗4.1. 需求4.2. 實現步驟4.3. 值轉換和校驗的好處4.3.1. 數據轉換的好處 4.4. 數據校驗的好處4.5. 原理4.5.1. 值轉換器原理4.5.2. 數據…

大數據治理:數字時代的關鍵密碼

大數據治理:數字時代的關鍵密碼 在信息技術飛速發展的今天,數字化浪潮席卷全球,深刻地改變著我們的生活和工作方式。數據,作為數字化時代的核心資產,正以前所未有的速度增長和積累。據國際數據公司(IDC&am…

LeetCode 1299.將每個元素替換為右側最大元素:倒序遍歷,維護最大值,原地修改

【LetMeFly】1299.將每個元素替換為右側最大元素:倒序遍歷,維護最大值,原地修改 力扣題目鏈接:https://leetcode.cn/problems/replace-elements-with-greatest-element-on-right-side/ 給你一個數組 arr ,請你將每個…

機器學習面試題匯總

1. 基礎知識 什么是監督學習和無監督學習? 監督學習是基于已標注的訓練數據來學習預測模型;無監督學習則是在沒有標簽的數據上進行學習,尋找數據的結構或模式。什么是過擬合和欠擬合? 過擬合是指模型在訓練數據上表現很好,但在測試數據上表現差。欠擬合是指模型在訓練數據…

【SQL教程|07】sql中條件查詢where用法示例

SQL WHERE 條件查詢教程 在SQL中,WHERE 條件用于在 SELECT 語句后過濾結果集,只返回符合條件的記錄。它幫助我們從大量數據中提取所需的信息。以下是使用 WHERE 條件的逐步指南。 1. 基本語法 SELECT [字段] FROM [表] WHERE [條件];SELECT&#xff1a…