ubuntu中使用docker

上一篇我已經下載了一個ubuntu:20.04的鏡像;

1. 查看所有鏡像

sudo docker images

2. 基于本地存在的ubuntu:20.04鏡像創建一個容器,容器的名為cppubuntu-1。創建的時候就會啟動容器。

sudo docker run -itd --name cppubuntu-1 ubuntu:20.04

結果出現長串的容器ID號,說明創建容器cppubuntu-1成功

3.? 查看docker中有哪些容器

sudo docker ps -a

4. 停止運行容器。

sudo docker stop 2ffec3839753

5. 啟動容器

sudo docker start 2ffec3839753

6. 通過容器ID號刪除容器(注意只有停止運行的容器才能刪除)

sudo docker rm 容器的ID號

7. 通過容器ID號進入容器內部

sudo docker exec -it 2ffec3839753 /bin/bash

8. 查看容器當前大小

sudo docker ps -s

9. 將宿主機上的文件拷貝到容器內部

sudo docker cp /home/lmz/workspace/opencv4_10_0_tools/opencv-4.10.0.zip 2ffec3839753:/home/lmz/tools
sudo docker cp ./cmake-3.31.6.tar.gz 2ffec3839753:/home/lmz/tools

----------------------------------------------------------------------------------------------------------------------

搭建c++開發環境

9. 安裝gcc/g++

apt-get install build-essential

9.1 查看編譯器版本

gcc --version
g++ --version
make --version

10 指定版本安裝CMake

10.1 安裝ssl庫

sudo apt-get install libssl-dev

10.2 解壓安裝包

tar -zxvf cmake-3.31.6.tar.gz && cd cmake-3.31.6

10.3 查看配置文件

./bootstrap --help

10.4 配置(將cmake安裝到指定的位置)

./bootstrap --prefix=/usr/local/cmake

10.5 編譯cmake源文件(指定8個線程編譯源文件)

make -j8

10.6 安裝cmake

make install

10.7 將cmake的安裝路徑添加環境變量

打開 【vim /etc/profile】文件,在文件末尾輸入一下內容:

# cmake env path 
export PATH=/usr/local/cmake/bin:$PATH

10.8 刷新環境變量

source /etc/profile

10.9 驗證是否安裝成功

切換到任意目錄下執行如下命令,驗證安裝是否成功

cmake --version

安裝成功的樣子:

10.10 刪除cmake的源碼目錄和源碼壓縮包(不影響已經安裝好的cmake)?,免得占總docker容器空間。

rm -fr ./cmake-3.31.6
rm -rf ./cmake-3.31.6.tar.gz

?注意,如果你和我一樣,虛擬機上的宿主機是ubuntu20.04。

在宿主機上安裝docker。docker容器cppubuntu-1以ubuntu:20.04鏡像文件創建的,并且在容器內部搭建開發環境,那么你關機虛擬機之后,容器會停止。cmake環境會找不到。
再次開機進入到容器后,需要重新刷新環境變量

source /etc/profile

可以不指定cmake的安裝目錄,會不需要這一步吧

**********************************************************************************************************

安裝opencv--c++開發環境

1. 下載源碼包

wget https://github.com/opencv/opencv/archive/refs/tags/4.10.0.zip

2. 解壓并且進入到解壓后的文件夾中

unzip opencv-4.10.0.zip
cd opencv-4.10.0

3. 構建cmake項目(注意這個地方安裝目錄被我寫成opencv4_9,我opencv的源碼是4.10。只是安裝路徑被我寫為opencv4_9。不影響的)

cmake -B build -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/usr/local/opencv4_9
-B指定一個構建目錄。-B build表示會在當前文件夾下創建一個build文件夾,待會兒構建后的文件全部放入其中。
-G指定生成器。-G "Unix Makefiles"表示生成一個適合于Unix下使用的Makefile

-G "MinGW Makefiles"表示用于生成 適用于Windows 上使用MinGW 編譯器使用的 Makefile;

-G "Visual Studio 16 2019"表示為 Windows 平臺上的 Visual Studio IDE 生成解決方案文件(.sln)
-D設置一個 CMake 變量。-DCMAKE_INSTALL_PREFIX=/usr/local/opencv4_9? ?
表示變量名為:CMAKE_INSTALL_PREFIX,變量的值為:/usr/local/opencv4_9

執行完上述命令后,會在opencv的源碼目錄下創建一個build目錄,并且在build目錄下生成一堆文件。注意上述操作并不會創建? /usr/local/opencv4_9?這個目錄。
?

4. 編譯源碼

cmake --build build/

5. 安裝

cmake --install build/

執行這個命令,將編譯好的庫和頭文件以及cmake文件復制到之前指定的CMAKE_INSTALL_PREFIX里,如下圖所示:

6 測試安裝成功沒有

記住自己的安裝目錄;/usr/local/opencv4_9

切換到安裝目錄下的該文件夾? ? /usr/local/opencv4_9/lib/cmake/opencv4 查看是否有xxx.cmake

編寫一個CMakeLists.txt腳本測試

cmake_minimum_required(VERSION 3.0)project(Demo)# 指定opencv的xxxx.cmake文件目錄,執行cmake文件中記錄著opencv的頭文件目錄位置,庫目錄所在位置。
set(OpenCV_DIR "/usr/local/opencv4_9/lib/cmake/opencv4")# 指定版本查找opencv
find_package(OpenCV 4.10 REQUIRED)# 打印查找到的內容
message(STATUS "Found OpenCV version: ${OpenCV_VERSION}")
message(STATUS "OpenCV libraries to link: ${OpenCV_LIBS}")
message(STATUS "OpenCV include directories: ${OpenCV_INCLUDE_DIRS}")

?執行命令

cmake -S . -B build

安裝成功,可以創建opencv項目了。

----------------------------------------------再次安裝成功確定-------------------------------------------------------

?7. 拷貝一張圖像進入到容器

sudo docker cp ./bus.jpg 2ffec3839753:/home/lmz/workspace/test

編寫CMakeLists.txt

cmake_minimum_required(VERSION 3.0)project(Demo)set(OpenCV_DIR "/usr/local/opencv4_9/lib/cmake/opencv4") # 對應上面剛查的目錄find_package(OpenCV 4.10 REQUIRED)
message(STATUS "22222 Found OpenCV version: ${OpenCV_VERSION}")
message(STATUS "33333 OpenCV libraries to link: ${OpenCV_LIBS}")
message(STATUS "44444 OpenCV include directories: ${OpenCV_INCLUDE_DIRS}")add_executable(${PROJECT_NAME} main.cpp)target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})

編寫main.cpp

#include <opencv2/opencv.hpp>
#include <iostream>
#include <filesystem>  // C++17 才支持 std::filesystemint main() {// 圖像路徑std::string imagePath = "/home/lmz/workspace/test/bus.jpg";// 讀取圖像cv::Mat img = cv::imread(imagePath);if (img.empty()) {std::cerr << "無法讀取圖像!路徑:" << imagePath << std::endl;return -1;}// 轉換為灰度圖cv::Mat grayImg;cv::cvtColor(img, grayImg, cv::COLOR_BGR2GRAY);// 獲取文件所在目錄std::string outputImagePath = "/home/lmz/workspace/test/bus_test.jpg";// 保存灰度圖bool success = cv::imwrite(outputImagePath, grayImg);if (success) {std::cout << "灰度圖像已保存至: " << outputImagePath << std::endl;} else {std::cerr << "保存圖像失敗!" << std::endl;return -1;}return 0;
}

執行命令:?

cmake -S . -B build && cmake --build build && cd build && make && cd - && ./build/Demo

查看結果:

OK安裝成功。?

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

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

相關文章

均衡后的SNRSINR

本文主要摘自參考文獻中的前兩篇&#xff0c;相關文獻中經常會出現MIMO檢測后的SINR不過一直沒有找到相關數學推到過程&#xff0c;其中文獻[1]中給出了相關原理在此僅做記錄。 1. 系統模型 復信道模型 n t n_t nt? 根發送天線&#xff0c; n r n_r nr? 根接收天線的 MIMO 系…

佰力博科技與您探討熱釋電測量的幾種方法

熱釋電的測量主要涉及熱釋電系數的測定&#xff0c;這是表征熱釋電材料性能的重要參數。熱釋電系數的測量方法主要包括靜態法、動態法和積分電荷法。其中&#xff0c;積分電荷法最為常用&#xff0c;其原理是通過測量在電容器上積累的熱釋電電荷&#xff0c;從而確定熱釋電系數…

idea中 maven 本地倉庫有jar包,但還是找不到,解決打包失敗和無法引用的問題

1、刪除本地倉庫中的文件 進入本地倉庫對應jar包文件目錄中刪除_remote.repositories文件和結尾為.lastUpdated的文件 2、回到IDEA刷新Maven 3、查看之前引用不了的jar是否引入成功

ALOHA ACT算法與源碼筆記

算法 一文通透動作分塊算法ACT&#xff1a;斯坦福ALOHA團隊推出的動作序列預測算法(Action Chunking with Transformers) 比較簡單&#xff0c;算法題目里就寫了&#xff1a;Action Chunking with Transformers&#xff0c;比較有特色的地方就是Action Chunking&#xff0c;核…

數字ic后端設計從入門到精通6(含fusion compiler, tcl教學)repeater詳解

Repeaters RC延遲與導線長度的關系&#xff1a; 導線的電阻&#xff08;R&#xff09;和電容&#xff08;C&#xff09;都會隨著導線長度&#xff08;l&#xff09;的增加而增大。RC延遲是電阻和電容共同作用導致的信號延遲。由于RC延遲與R和C的乘積有關&#xff0c;因此它會隨…

Data Warebase 成功押注 PostgreSQL 生態,或成 AI 時代數據底座

本文內容整理自 ProtonBase CEO 王紹翾在 AICon 的主題演講《Data Warebase: Instant Ingest-Transform-Explore-Retrieve for AI Applications》。作者的職業經歷貫穿了 AI 1.0、2.0 和 3.0 的時代&#xff0c;從搜索推薦&#xff0c;到視覺 / 語音 / NLP 智能&#xff0c;再到…

【電力電子】基于STM32F103C8T6單片機雙極性SPWM逆變(硬件篇)

本項目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脈寬調制)電源模塊,能夠生成可調頻率和幅值的正弦波交流電源輸出。該項目適用于逆變器、UPS電源、變頻器等應用場景。 供電電源 輸入電壓采集 上圖為本設計的電源電路,圖中 D1 為二極管, 其目的是防止正負極電源反接, …

Kubernetes (k8s)版本發布情況

Kubernetes (k8s)版本發布情況 代碼放在 GitHub - kubernetes/kubernetes: Production-Grade Container Scheduling and Management https://github.com/kubernetes/kubernetes/releases 文檔放在 kubernetes.io各個版本變更等: https://github.com/kubernetes/kubernet…

Python 接口:從協議到抽象基 類(Python使用register的方式)

Python使用register的方式 示例 11-14 把 Tombola.register 當作類裝飾器使用。在 Python 3.3 之 前的版本中不能這樣使用 register&#xff0c;必須在定義類之后像普通函數那 樣調用&#xff0c;如示例 11-14 中最后那行注釋所述。 雖然現在可以把 register 當作裝飾器使用了…

GRU 參數梯度推導與梯度消失分析

GRU 參數梯度推導與梯度消失分析 1. GRU 前向計算回顧 GRU 單元的核心計算步驟&#xff08;忽略偏置項&#xff09;&#xff1a; 更新門: z_t σ(W_z [h_{t-1}, x_t]) 重置門: r_t σ(W_r [h_{t-1}, x_t]) 候選狀態: ?h_t tanh(W_h [r_t ⊙ h_{t-1}, x_t]) 新…

【字節擁抱開源】字節團隊開源視頻模型 ContentV: 有限算力下的視頻生成模型高效訓練

本項目提出了ContentV框架&#xff0c;通過三項關鍵創新高效加速基于DiT的視頻生成模型訓練&#xff1a; 極簡架構設計&#xff0c;最大化復用預訓練圖像生成模型進行視頻合成系統化的多階段訓練策略&#xff0c;利用流匹配技術提升效率經濟高效的人類反饋強化學習框架&#x…

分布式增量爬蟲實現方案

之前我們在討論的是分布式爬蟲如何實現增量爬取。增量爬蟲的目標是只爬取新產生或發生變化的頁面&#xff0c;避免重復抓取&#xff0c;以節省資源和時間。 在分布式環境下&#xff0c;增量爬蟲的實現需要考慮多個爬蟲節點之間的協調和去重。 另一種思路&#xff1a;將增量判…

單片機0-10V電壓輸出電路分享

一、原理圖 二、芯片介紹 GP8101是一個PWM信號轉模擬信號轉換器&#xff0c;相當于一個PWM信號輸入&#xff0c;模擬信號輸出的DAC。此 芯片可以將占空比為0%到100%的PWM信號線性轉換成0-5V或者0-10V的模擬電壓&#xff0c;并且輸出電壓 精度小于1%。GP8101M可以處理高頻調制的…

Spring AMQP

在現代分布式系統中&#xff0c;消息隊列是一種非常重要的通信機制&#xff0c;它能夠實現服務之間的異步通信、負載均衡以及解耦。Spring AMQP 是 Spring 框架對 AMQP&#xff08;高級消息隊列協議&#xff09;的支持&#xff0c;而 RabbitMQ 是 AMQP 協議的最流行實現之一。通…

第6章:Neo4j數據導入與導出

在實際應用中&#xff0c;數據的導入與導出是使用Neo4j的重要環節。無論是初始數據加載、系統遷移還是數據備份&#xff0c;都需要高效可靠的數據傳輸機制。本章將詳細介紹Neo4j中的各種數據導入與導出方法&#xff0c;幫助讀者掌握不同場景下的最佳實踐。 6.1 數據導入策略 …

RKNN開發環境搭建1-基于Ubuntu 18.04系統使用Docker安裝rknn-toolkit2

目錄 寫在最前面Docker 方式安裝rknn-toolkit2寫在最前面 瑞芯微在RKNN的環境搭建方面的資料很多,但是在搭建過程中發現很多問題教程中并未提及,對初學者不友好。所以博主做了這個系列的文章,從開始搭建環境到對于RKNN Model Zoo的示例進行實踐,希望能對初學者有幫助。堅持…

【實施指南】Android客戶端HTTPS雙向認證實施指南

&#x1f510; 一、所需準備材料 證書文件&#xff08;6類核心文件&#xff09; 類型 格式 作用 Android端要求 CA根證書 .crt/.pem 驗證服務器/客戶端證書合法性 需預置到Android信任庫 服務器證書 .crt 服務器身份證明 客戶端需持有以驗證服務器 客戶端證書 .crt 客戶端身份…

FPGA管腳類型,及選擇

fpga的IO Type選擇&#xff0c;如下&#xff1a; 具體的定義&#xff1a;

SELinux是什么以及如何編寫SELinux策略

目錄 一、SELinux 是什么&#xff1f; 二、SELinux 的兩種模式 如何查看當前 SELinux 狀態&#xff1f; 三、SELinux 在 Android 中的作用 四、為什么Root之后很多設備是 Permissive&#xff1f; 五、開發與調試場景 總結 &#x1f9e9; 一、什么是 SELinux 策略&#x…

MQTT示例體驗(C)

1、通用依賴準備 安裝編譯工具? Linux/macOS 需安裝&#xff1a; sudo apt update && sudo apt install build-essential cmake git # Ubuntu/Debian:ml-citation{ref"6" data"citationList"} brew install cmake # macOSWindows 需安裝 CMake…