搭建 C/C++_CMake_Boost_git 开发环境

搭建 C++ 开发环境

步骤 1:启动 Ubuntu 18.04 容器

创建并启动一个 Ubuntu 18.04 容器:

docker run -itd --name cppubuntu ubuntu:18.04
  • -itd:以交互模式运行容器,并在后台运行。
  • --name cppubuntu:命名容器为 cppubuntu
  • ubuntu:18.04:使用 Ubuntu 18.04 镜像。

进入容器:

docker exec -it cppubuntu /bin/bash

步骤 2:更新软件源

更新 apt 软件源以确保可以安装最新的软件包:

apt-get update

步骤 3:安装 GCC/G++ 工具链

安装 build-essential 包,包含 GCC、G++ 和其他编译工具:

apt-get install -y build-essential
  • -y:自动确认安装。

测试 G++ 版本和 C++17 支持

创建一个简单的 C++ 测试文件以验证 G++ 是否支持 C++17:

echo '#include <iostream>' > test.cpp
echo 'int main() { std::cout << __cplusplus << std::endl; return 0; }' >> test.cpp
g++ -std=c++17 test.cpp -o test
./test
  • 输出 201703L 表示支持 C++17 标准。

步骤 4:安装 wget

安装 wget 用于下载文件:

apt-get install -y wget

步骤 5:安装 Boost 库

Boost 是一个功能强大的 C++ 库,下面是安装步骤。

5.1 下载 Boost 源码

下载 Boost 1.82.0 源码包:

wget https://archives.boost.io/release/1.88.0/source/boost_1_88_0.tar.gz

提示:如果下载速度慢,可在本地(如 Windows)下载后,通过以下方式将文件传输到容器:

  1. 将文件上传到云服务器(例如通过 FileZilla)。
  2. 复制到容器:
docker cp /home/ubuntu/boost_1_88_0.tar.gz cppubuntu:/test

5.2 安装 Boost 依赖库

安装 Boost 编译所需的依赖:

apt-get install -y python-dev autotools-dev libicu-dev build-essential libbz2-dev libboost-all-dev

5.3 解压并安装 Boost

解压源码并进行安装:

tar -zxvf /test/boost_1_88_0.tar.gz
cd boost_1_88_0
./bootstrap.sh --prefix=/usr
./b2 install
  • --prefix=/usr:指定安装路径(默认安装在 /usr/local)。
  • ./b2 install:编译并安装 Boost 库。

5.4 测试 Boost 安装

创建测试文件 boosthello.cpp

#include <iostream>
#include <boost/version.hpp>
using namespace std;
int main() {cout << "Boost 版本: " << BOOST_VERSION << endl;return 0;
}

编译并运行:

g++ -o boosthello boosthello.cpp
./boosthello
  • 输出类似 Boost 版本: 108200,表示 Boost 1.82.0 安装成功。

步骤 6:安装 Git

安装 Git 并配置用户信息:

apt-get install -y git
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
  • 替换 "Your Name""your.email@example.com" 为您的实际信息。

步骤 7:安装 CMake

CMake 是常用的构建工具,下面是安装步骤。

7.1 下载 CMake 源码

下载 CMake 3.27.0 源码包:

wget https://github.com/Kitware/CMake/releases/download/v3.27.0/cmake-3.27.0.tar.gz

7.2 安装 CMake 依赖

安装必要的 SSL 库:

apt-get install -y libssl-dev

7.3 解压并编译 CMake

解压源码并进行编译安装:

tar -zxvf cmake-3.27.0.tar.gz
cd cmake-3.27.0
./bootstrap
make
make install

7.4 测试 CMake 安装

验证 CMake 版本:

cmake --version
  • 输出类似 cmake version 3.27.0,表示安装成功。

注意事项

  1. 网络问题:如果 wget 下载缓慢,考虑使用本地下载后通过 docker cp 传输。
  2. 权限问题:容器内命令默认以 root 用户执行,无需 sudo。若在宿主机操作,可能需要 sudo
  3. 磁盘空间:确保容器有足够空间存放源码和编译文件。
  4. 版本更新:Boost 和 CMake 的版本可根据需要替换为最新版本,注意检查依赖兼容性。

总结

完成以上步骤后,将在 Ubuntu 18.04 容器中拥有一个完整的 C++ 开发环境,支持 C++17、Boost 库、Git 和 CMake。您可以开始编写、编译和运行 C++ 项目。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/906943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OceanBase数据库全面指南(查询进阶篇DQL)

文章目录 一、OceanBase条件查询详解——WHERE子句的艺术1.1 WHERE子句基础语法与原理1.2 基础条件查询实战1.3 高级条件表达式1.4 分布式环境下的条件查询优化二、OceanBase排序查询——ORDER BY深度解析2.1 ORDER BY基础与执行原理2.2 单字段排序实战2.3 多字段复杂排序2.4 排…

.NET 10 - 尝试一下Minimal Api的Validation新特性

1.简单介绍 2025年11月微软将会发布.NET10&#xff0c;这是LTS(Long Term Support)版本。当前.NET10已经处于Preview4版本&#xff0c;微软对Runtime, Library, SDK, C#, Asp.NET Core, MAUI等都做了很多enhancement。近些年微软对Minimal Api一直在持续地更新。在.NET8中, Mi…

vue+threeJS 创建镂空球体(SphereGeometry)

嗨&#xff0c;我是小路。今天主要和大家分享的主题是“vuethreeJS 创建镂空球体&#xff08;SphereGeometry&#xff09;”。 上次看到一个做镂空球体的项目&#xff0c;自己也准备尝试着做一做。今天终于做完了&#xff0c;并对这个项目进行梳理。 镂空球体示例效果…

Docker 镜像打包到本地

保存镜像 使用 docker save 命令将镜像保存为一个 tar 文件。命令格式如下&#xff1a; docker save [options] IMAGE [IMAGE...]示例&#xff1a;docker save -o centos.tar centos:latest--output 或 -o&#xff1a;将输出保存到指定的文件中。 加载镜像 如果需要在其他机器…

前端常见的安全问题

跨站脚本攻击(XSS) XSS&#xff08;跨站脚本攻击&#xff0c;Cross-Site Scripting&#xff09;是一种通过在网页中注入恶意脚本&#xff0c;从而窃取用户数据或控制用户行为的攻击方式。注入的js跟网页与原有的js具有同样的权限&#xff0c;可以获得server端数据、可以获取co…

Spring Boot与Disruptor高性能队列整合指南

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 一、Disruptor简介 Disruptor是LMAX公司开发的高性能无锁队列框架&#xff0c;其核心设计通过以下特性实现卓越性能&#xff1a; 环形数组结构&#xff08;…

MongoDB CRUD操作完全指南:从入门到精通

在当今数据驱动的时代&#xff0c;数据库管理系统扮演着至关重要的角色。作为最受欢迎的NoSQL数据库之一&#xff0c;MongoDB以其灵活的数据模型、卓越的可扩展性和强大的查询能力赢得了开发者的青睐。本文将全面介绍MongoDB的核心操作——CRUD&#xff08;创建、读取、更新、删…

2025/5/25 学习日记 linux进阶命令学习

tree:以树状结构显示目录下的文件和子目录&#xff0c;方便直观查看文件系统结构。 -d&#xff1a;仅显示目录&#xff0c;不显示文件。-L [层数]&#xff1a;限制显示的目录层级&#xff08;如 -L 2 表示显示当前目录下 2 层子目录&#xff09;。-h&#xff1a;以人类可读的格…

quickbi实现关联度分析(复刻PowerBI展示)

quickbi实现关联度分析&#xff08;复刻PowerBI展示&#xff09; PowerBI通过DAX创建度量值&#xff0c;可以比较轻松的实现不同产品的关联度分析&#xff0c;即购物篮分析&#xff0c;但如果使用quickbi&#xff0c;则需要通过sql代码创建一个数据集&#xff0c;然后再通过数…

git 把一个分支A的某一个 commit 应用到另一个分支B上

先记住分支 A 上你要应用的那个 commit <commit_id> checkout 到分支 B git cherry-pick <commit_id>完成

基于Python的分布式网络爬虫系统设计与实现

摘要 随着互联网信息爆炸性增长&#xff0c;大规模数据采集与分析需求日益增加。本文设计并实现了一套基于Python的分布式网络爬虫系统&#xff0c;采用图形用户界面实现便捷操作&#xff0c;集成异步IO技术与多线程处理机制&#xff0c;有效解决了传统爬虫在数据获取、处理效…

一文讲透golang channel 的特点、原理及使用场景

在 Go 语言中&#xff0c;通道&#xff08;Channel&#xff09; 是实现并发编程的核心机制之一&#xff0c;基于 CSP&#xff08;Communicating Sequential Processes&#xff09; 模型设计。它不仅用于协程&#xff08;Goroutine&#xff09;之间的数据传递&#xff0c;还通过…

PID项目---硬件设计

该项目是立创训练营项目&#xff0c;这些是我个人学习的记录&#xff0c;记得比较潦草 1.硬件-电路原理电赛-TI-基于MSPM0的简易PID项目_哔哩哔哩_bilibili 这个地方接地是静电的考量 这个保护二极管是为了在电源接反的时候保护电脑等设备 大电容的作用&#xff1a;当电机工作…

【分库分表】理论基础

目录 为什么要分库分表 垂直分 垂直分库 垂直分表 垂直切分优缺点 优点 缺点 水平分 水平分库 水平分表 水平切分优缺点 优点 缺点 为什么要分库分表 分库分表是一种场景解决方案&#xff0c;它的出现是为了解决一些场景问题的 单表过大的话&#xff0c;读请求进…

UDP和TCP示例程序

查看自己的IP地址 以管理员身份运行cmd 输入 ipconfig 复制图中的IPv4地址 UDP通信程序 UdpReceiver.java import java.net.*;public class UdpReceiver {public static void main(String[] args) {// 监听端口&#xff08;需与发送端保持一致&#xff09;int listenPort…

Double使用注意事项

目录 数据精度问题BigDecimal的正确使用构造陷阱数值比较除法舍入控制 RoundingMode 数据精度问题 Java开发中&#xff0c;Double类作为包装类用于处理双精度浮点数。浮点数double无法精确表示某些十进制小数&#xff08;如0.1&#xff09;&#xff0c;导致运算结果出现误差 …

8.2 线性变换的矩阵

一、线性变换的矩阵 本节将对每个线性变换 T T T 都指定一个矩阵 A A A. 对于一般的列向量&#xff0c;输入 v \boldsymbol v v 在空间 V R n \pmb{\textrm V}\pmb{\textrm R}^n VRn 中&#xff0c;输出 T ( v ) T(\boldsymbol v) T(v) 在空间 W R m \textrm{\pmb W}\…

【后端高阶面经:微服务篇】5、限流实战:高并发系统流量治理全攻略

一、限流阈值的三维度计算模型 1.1 系统容量基准线:压测驱动的安全水位 1.1.1 压力测试方法论 测试目标:确定系统在资源安全水位(CPU≤80%,内存≤70%,RT≤500ms)下的最大处理能力测试工具: 单机压测:JMeter(模拟10万并发)、wrk(低资源消耗)集群压测:LoadRunner …

同一无线网络下的设备IP地址是否相同?

在家庭和办公网络普及的今天&#xff0c;许多人都会好奇&#xff1a;连接同一个Wi-Fi的设备是否共享相同的IP地址&#xff1f;这个问题看似简单&#xff0c;实则涉及多个角度。本文将为您揭示其中的技术奥秘。 用一个无线网IP地址一样吗&#xff1f;同一无线网络&#xff08;如…

git push出现 “HTTP 400 curl 22 The requested URL returned error: 400...“错误

错误内容是&#xff1a; 错误&#xff1a;RPC 失败。HTTP 400 curl 22 The requested URL returned error: 400 send-pack: unexpected disconnect while reading sideband packet 致命错误&#xff1a;远端意外挂断了 检查发现&#xff1b;文件大小5M&#xff0c;远低于100M&a…