运行代码报错subprocess.CalledProcessError:Command ‘[‘which‘,‘c++‘]‘ returned non-zero exit status 1.

我现在是要在x86_64麒麟系统电脑上运行我的代码,结果出现下面的报错信息:

subprocess.CalledProcessError: Command '['which', 'c++']' returned non-zero exit status 1 

出现这个问题的原因是Python 或系统脚本调用 which c++ 时,系统没有找到 c++ 编译器。其根本原因可能是:

  • 系统中没有安装 g++ 或 build-essential;
  • 或者虽然安装了,但没有加入 PATH
  • 或者安装到了非默认路径(比如 /home/xxx/mygcc)。 

然后我就开始尝试安装这个g++,我的系统是 银河麒麟 V10(x86_64),电脑不能联网,所以就分为在线安装离线安装两种形式。

1、在线安装

1、更新索引

sudo apt update 

这一步会刷新系统的包列表,确保后续安装不会提示找不到包。

2、安装编译器与工具

执行以下命令安装:

sudo apt install -y build-essential 

build-essential 是一个集合包,会自动安装以下关键工具:

  • gcc(C 编译器)
  • g++(C++ 编译器)
  • make(编译构建工具)
  • libc-dev(C 库头文件)

3、验证是否安装成功

依次执行下面命令验证:

which c++ which g++ which gcc 

如果安装成功,会返回类似路径:

/usr/bin/c++ /usr/bin/g++ /usr/bin/gcc 

再检查版本号:

g++ --version 

输出示例:

g++ (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0 

在线安装完成

2、离线安装

离线安装可能需要有一个联网的相同版本的电脑或者虚拟机,在可以联网的电脑上把需要的包都下载下来。

1、在联网的麒麟虚拟机上下载离线安装包

1️⃣ 创建一个目录存放离线包

mkdir -p ~/offline_gcc_pkgs cd ~/offline_gcc_pkgs 

2️⃣下载 build-essential 及依赖包(不安装,只下载)

sudo apt install --download-only build-essential g++ gcc make -y 

这一步会把所有 .deb 文件下载到系统缓存目录:

/var/cache/apt/archives/ 

2、收集全部依赖包到一个文件夹

把所有下载好的包复制出来:

mkdir -p ~/offline_gcc_pkgs cp /var/cache/apt/archives/*.deb ~/offline_gcc_pkgs/ 

(如果你之前安装过别的软件,可能会夹杂其他包,可以先清理旧缓存)

可选清理再下载的做法:

sudo apt clean sudo apt update sudo apt install --download-only build-essential g++ gcc make -y mkdir -p ~/offline_gcc_pkgs cp /var/cache/apt/archives/*.deb ~/offline_gcc_pkgs/ 

3、打包成一个可移动文件夹

把离线安装包打包成一个压缩包:

cd ~ tar -czvf offline_gcc_pkgs.tar.gz offline_gcc_pkgs/ 

💡 生成的文件:

~/offline_gcc_pkgs.tar.gz 

就是完整的离线安装包。

4、复制到离线电脑

使用 U 盘 或 内网共享将该压缩包复制到离线电脑,例如:

/home/greatwall/ 

然后在离线电脑上执行:

cd /home/greatwall tar -xzvf offline_gcc_pkgs.tar.gz cd offline_gcc_pkgs 

5、在离线电脑上离线安装

执行以下命令一次性安装全部包:

sudo dpkg -i *.deb 

如果提示依赖问题(但无法联网),你可以先忽略;
通常这些依赖都已经在离线包里。

安装结束后验证:

which c++ which g++ which gcc g++ --version 

输出应类似:

/usr/bin/c++ /usr/bin/g++ /usr/bin/gcc g++ (Ubuntu 9.3.0) 9.3.0 

✅ 表示离线安装成功。

由于我按照步骤使用离线安装没有安装成功,还是出现那个问题,所以后面就换了一种新方法,下载“预编译好的 GCC 二进制包”(实测有效)

1️⃣ 去这里下载:

xPack 项目的官方预编译版(稳定、安全、适合 x86_64 Linux)

gcc-xpack - 浏览 /v11.5.0-1 at SourceForge.net

找到版本:(根据自己的需要找对应的版本)

xpack-gcc-12.2.0-1-linux-x64.tar.gz 

2️⃣ 拷贝到你的系统,比如:

/home/greatwall/mygcc/ 

3️⃣ 解压:

cd /home/greatwall/mygcc tar -xvf xpack-gcc-12.2.0-1-linux-x64.tar.gz 

会得到目录类似:

/home/greatwall/mygcc/xpack-gcc-12.2.0-1/ 

4️⃣ 配置环境变量:

echo 'export PATH=/home/greatwall/mygcc/xpack-gcc-12.2.0-1/bin:$PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=/home/greatwall/mygcc/xpack-gcc-12.2.0-1/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc 

5️⃣ 验证:

g++ --version gcc --version 

✅ 若输出 12.2.0,说明成功!

Read more

C++日志管理从基础到完善

C++日志管理从基础到完善

万古教员有名言,自信人生二百年。 个人主页:oioihoii 喜欢内容的话欢迎关注、点赞、收藏!感谢支持,祝大家祉猷并茂,顺遂无虞! 版本一:基础日志代码 在设计C++日志系统时,我们需要考虑以下几个关键点: 1. 易用性:日志系统应该易于使用,开发者应该能够轻松地添加日志条目。 2. 性能:日志系统应该尽可能地减少对应用程序性能的影响。这意味着日志记录的过程应该尽可能地快速,以减少对应用程序的延迟。 3. 灵活性:日志系统应该能够支持不同级别的日志(如错误、警告、信息、调试等),并能够在运行时动态地更改日志级别。 4. 可配置性:日志系统应该允许开发者配置日志的各种参数,如日志文件的位置、日志的格式等。 5. 线程安全:如果应用程序是多线程的,那么日志系统也必须是线程安全的。 下面是一个简单的C++日志系统的设计,它考虑了上述的所有因素: #include<iostream>#include<

By Ne0inhk
【C++】第十四节—模版进阶(非类型模版参数+模板的特化+模版分离编译+模版总结)

【C++】第十四节—模版进阶(非类型模版参数+模板的特化+模版分离编译+模版总结)

你好,我是云边有个稻草人  C++—本文章所属专栏,欢迎订阅,持续更新中! 目录 一、非类型模板参数 【非类型模版参数的用处在哪里? 】 【了解array 容器—array和普通数组的区别在哪里?—对越界的检查】 二、模板的特化(特殊化处理) 2.1 概念 2.2 函数模版特化 【函数模版特化可使用,但不推荐】  2.3 类模版特化 【全特化】 【偏特化】  【判断走哪个类模版?】 【类模版特化应用实例】 三、模版分离编译 3.1 什么是分离编译 3.2 模板的分离编译  【分析】 3.3 解决办法 【分离定义扩展阅读】 四、模板总结 【优点】 【缺陷】 正文开始—

By Ne0inhk
【C++11(下)】—— 我与C++的不解之缘(三十二)

【C++11(下)】—— 我与C++的不解之缘(三十二)

前言 随着 C++11 的引入,现代 C++ 语言在语法层面上变得更加灵活、简洁。其中最受欢迎的新特性之一就是 lambda 表达式(Lambda Expression),它让我们可以在函数内部直接定义匿名函数。配合 std::function 包装器 使用,可以大大提高代码的表达力与可维护性。 一、lambda 表达式基础语法 lambda表达式本质上就是一个匿名函数对象,与普通函数不同的是,它可以定义在函数内部; 一般情况下我们是使用auto或者模版参数定义的对象去接受lambda对象。 lambda表达式本质上是一个可调用对象(函数对象),其语法格式如下: [capture](parameter_list)-> return_type { function_body }; 各部分含义如下: 部分含义[]捕捉列表(capture list)()参数列表(与函数类似)-> return_

By Ne0inhk

2025年第十六届蓝桥杯大赛软件赛C/C++大学B组题解

第十六届蓝桥杯大赛软件赛C/C++大学B组题解 目录 * 第十六届蓝桥杯大赛软件赛C/C++大学B组题解 * 试题A: 移动距离 * 问题描述 * 解题思路 * 答案 * 试题B: 客流量上限 * 问题描述 * 解题思路 * 代码实现 * 答案: * [试题C: 可分解的正整数](https://www.dotcpp.com/oj/problem3319.html) * 问题描述 * 解题思路 * 代码实现 * [试题D: 产值调整](https://www.dotcpp.com/oj/problem3320.html) * 问题描述 * 解题思路 * 代码实现 * 答案 * [试题E: 画展布置](https://www.dotcpp.com/oj/

By Ne0inhk