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

Flutter 组件 substrate_bip39 的适配 鸿蒙Harmony 实战 - 驾驭区块链级 BIP39 安全底座、实现鸿蒙端私钥派生与国密级密钥保护方案

Flutter 组件 substrate_bip39 的适配 鸿蒙Harmony 实战 - 驾驭区块链级 BIP39 安全底座、实现鸿蒙端私钥派生与国密级密钥保护方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 substrate_bip39 的适配 鸿蒙Harmony 实战 - 驾驭区块链级 BIP39 安全底座、实现鸿蒙端私钥派生与国密级密钥保护方案 前言 在鸿蒙(OpenHarmony)生态向金融科技、Web3.0 以及受控安全办公领域深耕的过程中,“密钥管理(Key Management)”是所有信任链条的起点。面对“如何将助记词(Mnemonic)安全地转化为可用于签名的私钥”、“如何兼容 Polkadot/Substrate 这种具备高阶加密特性的异构账本协议”这些硬核问题,传统的 crypto 库往往力有不逮。 我们需要一种工业级、符合现代跨平台密码学标准(BIP39/Ed25519)的加密底座。 substrate_bip39 是基于 Substrate 框架裁剪出的高性能密钥派生引擎。

By Ne0inhk
Flutter 三方库 vy_string_utils 的鸿蒙化适配指南 - 实现高效的字符串模式校检、支持富文本清洗与多维度命名规范转换

Flutter 三方库 vy_string_utils 的鸿蒙化适配指南 - 实现高效的字符串模式校检、支持富文本清洗与多维度命名规范转换

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 vy_string_utils 的鸿蒙化适配指南 - 实现高效的字符串模式校检、支持富文本清洗与多维度命名规范转换 前言 在进行 Flutter for OpenHarmony 开发时,字符串处理几乎无处不在。从校验用户输入的手机号,到将后台返回的 snake_case 字段转化为鸿蒙 UI 需要的文本格式,这类基础工作如果通过硬编码实现,会产生大量的冗余逻辑。vy_string_utils 是一款轻量级却功能强悍的字符串工具包。它通过一系列精心设计的扩展方法,让鸿蒙开发者能以极简的语法管理所有文本流。本文将带大家领略这款“字符串手术刀”的威力。 一、原理解析 / 概念介绍 1.1 基础原理 vy_string_utils 基于 Dart

By Ne0inhk
AIGC时代 | 如何从零开始学网页设计及3D编程

AIGC时代 | 如何从零开始学网页设计及3D编程

文章目录 * 一、网页设计入门 * 1. 基础知识 * 2. 学习平台与资源 * 3. 示例代码:简单的HTML+CSS+JavaScript网页 * 二、3D编程入门 * 1. 基础知识 * 2. 学习平台与资源 * 3. 示例代码:简单的Unity 3D游戏 * 《编程真好玩:从零开始学网页设计及3D编程》 * 内容简介 * 作者简介 * 目录 在AIGC(人工智能生成内容)时代,网页设计和3D编程成为了许多人的热门学习方向。无论你是希望成为一名网页开发者,还是想进入3D建模和动画领域,从零开始学习并掌握这些技能将为你打开许多机会的大门。本文将详细介绍如何从零开始学习网页设计及3D编程,并附上示例代码。 一、网页设计入门 1. 基础知识 网页设计主要包括前端和后端技术。前端技术主要关注用户界面的设计和实现,主要包括HTML、CSS和JavaScript。后端技术则负责处理服务器端的逻辑和数据处理,常见的后端语言包括Node.js、Python等。 2. 学习平台与资源

By Ne0inhk
llama-server - 从命令行到HTTP Server

llama-server - 从命令行到HTTP Server

前言        llama-server是llama.cpp中用于发布大模型服务的工具。它通过极简的命令行配置,将复杂的模型推理过程封装为通用的 HTTP 接口;在底层,它选择以纯 C++ 编写的 cpp-httplib 作为服务框架的底层。本章分为应用实战与底层架构两部分。首先,我们将介绍不同参数下的大模型服务发布;接着,我们将详细解析 cpp-httplib 在项目中的具体实现,帮助读者掌握该服务端在网络调度层面的运行逻辑。 目录 * 1 应用实战:启动大模型服务 * 2 架构解析:基于cpp-httplib的运行机制 1 应用实战:启动大模型服务        llama-server是一款轻量级、兼容 OpenAI API、用于提供大语言模型服务的 HTTP 服务器。在上节中,我们启动了llama-server,构建了本地的大模型服务。本节将在此基础上,进一步深入llama-server启动过程的参数设置,同时演示如何利用curl工具发起网络请求,以实测并验证服务的接口响应。 1.1 模型服务参数设置        llama-server支持自定义

By Ne0inhk