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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…