运行代码报错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

【毕业论文没思路?paperxm智能写作一键解决!】

【毕业论文没思路?paperxm智能写作一键解决!】

毕业论文写作困境的常见原因 缺乏明确的研究方向或选题,导致难以展开论文框架。文献综述不足,无法有效支撑论点,造成写作停滞。时间管理不当,临近截止日期时压力倍增。对学术写作规范不熟悉,格式和逻辑容易出错。 paperxm的链接我就给大家放着了哈:www.paperxm.com Paperxm智能写作工具的核心功能 基于自然语言处理技术,自动生成论文大纲和初稿,提供选题建议。内置文献检索模块,快速匹配相关学术资源,辅助文献综述。支持多语言写作,满足不同学科领域的表达需求。实时语法检查和格式修正,确保论文符合学术规范。 如何使用Paperxm 它从开题报告、文献综述、论文写作还有仿写、到最后的答辩PPT都能帮我直接解决! 优势一:节省时间 使用paperxm写论文,可以让我告别繁琐的资料搜集和整理工作。paperxm能迅速从海量资料中筛选出有用的信息,为我的论文提供有力支持。这样一来,你就有更多的时间去思考、创新,提高论文质量。 优势二:提高写作质量 paperxm具有强大的语言处理能力,可以帮助我优化句子结构、纠正语法错误,甚至提供写作建议。这意味着,我的论文在pape

By Ne0inhk

Flutter 三方库 performance_timer 的鸿蒙化适配指南 - 实现毫秒级性能剖析、支持嵌套计时与自动化性能报告输出

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 performance_timer 的鸿蒙化适配指南 - 实现毫秒级性能剖析、支持嵌套计时与自动化性能报告输出 前言 在 Flutter for OpenHarmony 的高性能调优过程中,准确识别应用中的卡顿点和耗时逻辑(Hotspots)是至关重要的。虽然可以使用鸿蒙的调试工具,但在代码层面实现轻量级的自动化性能监控往往更高效。performance_timer 是一个专为颗粒化性能评估设计的库,它能以极简洁的代码实现对业务链路的精准计时。本文将带领大家在鸿蒙端实战性能剖析。 一、原理解析 / 概念介绍 1.1 基础原理 performance_timer 封装了 Dart 的 Stopwatch,并引入了计分(Lap)和分组概念。它通过记录执行前后的纳秒级时间戳,计算差值并进行结构化汇总。 监控引擎 高精度时钟 API 时间差计算

By Ne0inhk
类和对象(上)

类和对象(上)

一、类的定义         类有点类似c语言的结构体是一种自定义类型,但类里面除了定义一些成员变量外还有方法(成员函数),在访问的时候要指定类域。         在类定义时首先用一个class关键字,在后面接着类的名字,然后使用{ }在花括号里面定义成员变量和成员函数,最后需要在花括号外加分号,如下: class Stack { void Init(int n = 4) { arr = (int*)malloc(sizeof(int) * n); if (nullptr == arr) { perror("malloc申请空间失败"); return; } capacity = n; size = 0; } //...... int* arr; size_t size; size_t capacity; }; 这里calss也可以替换成struct,在类里面的函数默认都为内联函数,当然它不一定都展开具体还取决于编译器。 二、访问限定符

By Ne0inhk
一篇了解Copilot pro使用的笔记

一篇了解Copilot pro使用的笔记

当前AI 程序员已经默许了,除了使用国内外的那些头部Chat。Agent 模态已经肆意发展,因为随着AI的加成,大家都越来越主动或被动“效率起飞”。下面聊一下Copilot Pro的使用吧。 使用这个也就几个月吧,不谈购买心酸史,已经直接官网10刀了。这次也算开始心疼了,先研究一下这到底怎么用才不暴殄天物也不小才大用吧。哈哈,为了那该死的性价比~ 1.关于copilot pro(个人账号)可供使用的头端模型界面 (手机没拍好) 看起来可用的后端模型挺多的,各家各路,选啥自己整。但却不是按照时间来计算,明显的“流量”限制,就是官网说的访问配额。 x = 相对消耗倍率(Cost / Compute Weight Multiplier),它不是速度,也不是性能评分,而是: “使用该模型一次,相当于基础模型消耗的多少倍额度”。 还有: (1)先说每个模型后面的那个数字0X 0x 不是 免费无限用 而是 不单独计入

By Ne0inhk