Solana编译失败探讨(OpenEuler RISC-V版)
Solana 是 2017 年由 Anatoly Yakovenko 创立的开源项目,旨在打造高性能、去中心化且低成本的区块链平台2。它采用独特的 Proof of History(PoH)共识机制,结合 Tower BFT 等技术,实现了每秒数千笔交易的高吞吐量,确认时间仅 400 毫秒,每笔交易中位数费用为 0.00064 SOL12。Solana 支持链上程序开发,开发者可用 Rust 等语言编写智能合约,基于 eBPF 虚拟机高效运行1。其生态发展迅速,在 DeFi、NFT、GameFi 等领域扩张迅猛,凭借高性能和低费用吸引了大量开发者和用户,是市值第三的公链,对以太坊等传统公链构成有力挑战。
结合手头的工作,我做一次在OpenEuler 24.09 RISC-V上部署Solana的实战,并且调研失败的原因。
此处跳过Rustup以及Cargo、Rustc的下载,直接先从官网克隆Solana的项目下来。
cd solana
./cargo build
cargo用的是Solana官方提供的,不过出现了以下错误

我查了一下ring,它是一个加密算法库,主要用Rust实现,不过里面还有不少汇编代码,到这里的时候,我是初步怀疑没有提供RISC-V的汇编导致 build 失败,看了一下还真是。

有很大篇幅都是用 Assembly 写的,再随便挑了一个源码看看

就比如这个函数,很显然在OpenEuler RISC-V上,这几个预编译条件都不满足,好在这是 void 类型的函数,最后这个函数变成了空函数。不过有意思的是,cargo build 很顺利,并没有失败。
cargo build 是顺利的,不过到了这里有一个 build-script,是一个可执行文件,我尝试运行了一下,出现了似曾相识的错误。

和文章开头的那图一样,也是 thread "main" panic,因此又可以找到一个可以移植的软件包了,那就是 ring,因为这个,我在部署 Solana 的时候受挫,同时我也看了看 build.rs,这大概是它支持的几种架构。

看起来只支持常见的 x86,arm和wasm。不过这只是我在部署 Solana 遇到的第一个难点,假设 ring 移植成功了,后面可能还会遇到其它同样因为 RISC-V 而失败的包,本来 ring 已经够庞大了,因此移植 Solana 看起来似乎是一个工作量非常大的任务。
记录下来,如果有一天这些包成功移植完成了,再回头看看是否可以移植 Solana。
Solana编译失败探讨(OpenEuler RISC-V版)的更多相关文章
- 保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)
写在前面 本文叙述了在Ubuntu16.04 Server下安装CUDA8.0,cuDNN6.0以及源码编译安装TensorFlow1.4.0(GPU版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...
- sass安装:webpack sass编译失败,node-sass安装失败的终极解决方
文章来源:sass安装:webpack sass编译失败,node-sass安装失败的终极解决方 sass难言之隐-sass安装的坑 之前花了很多时间折腾node-sass,发现sass老是安装不上 ...
- 编译opengl编程指南第八版示例代码通过
最近在编译opengl编程指南第八版的示例代码,如下 #include <iostream> #include "vgl.h" #include "LoadS ...
- 因GIT默认忽略.dll文件导致的Visual Studio项目通过Bamboo编译失败
背景 由GIT管理的Visual Studio项目,使用Stash管理远端代码库,通过与Stash集成的Bamboo生成项目并发布 现象 Visual Studio项目本地生成成功,用SourceTr ...
- 格式化代码引发的css编译失败
之前在做feather项目,处理IE8下的问题时,写 filter: progid: DXImageTransform.Microsoft.AlphaImageLoader(src='#', sizi ...
- Maven多模块项目编译失败:程序包xxx不存在
项目结构如下: parent(父类工程) | - - - - - common(通用工具类子工程) | - - - - - projectA(springboot子工程,依赖common工程) pom ...
- redis make编译失败的原因
make clean redis编译失败可能是: 1.未安装gcc,gcc-c++ yum install gcc yum install gcc-c++ 2.未安装tcl yum install t ...
- 一次gcc编译失败分析
1. 场景: 在使用gcc编译时,编译器报错:xxx:'xxx'未定义的引用 2. 排查过程: 首先,我很自然的想到是不是自己使用了未定义的函数或者将函数名称写错了,在检查了一边过后,我发现自己使 ...
- Android studio 编译失败Error:Could not read entry ':app:processDebugManifest' from cache taskArtifacts.b
Android studio 编译失败 Error:Could not read entry ':app:processDebugManifest' from cache taskArtifacts. ...
- WDA编译失败问题
1.放假回来,wda编译失败,报错如下 2018-09-25 10:03:09.020964+0800 WebDriverAgentRunner-Runner[335:33309] +[CATrans ...
随机推荐
- [软件工具使用记录] windows离线ollama部署本地模型并配置continue实现离线代码补全
qwen2.5coder发布之后,觉得差不多可以实现离线模型辅助编程了,所以尝试在公司内网部署模型,配合vsocde插件continue实现代码提示.聊天功能. 目前使用qwen2.5coder的32 ...
- ABP 系列总结
2019年第一次接触 ABP 框架,那时候还是比较笨重的旧版本的,后来升级到 vNext 版本,我也基于 ABP 模块化的设计方式开发了一些模块用于日常工作.这个系列主要为了系统地记录一下日常工作与学 ...
- SpringCloud Alibaba(一) - Nacos 服务注册与发现,OpenFeign远程调用
1.基础项目过目介绍 1.1 数据库创建 1.2 项目模块分布 1.3 测试http接口调用 1.3.1 http接口调用配置类 //http接口调用配置类 @Configuration public ...
- 一个基于 Roslyn 和 AvalonEdit 的跨平台 C# 编辑器
前言 今天大姚给大家分享一个基于 Roslyn 和 AvalonEdit 开源.轻量.跨平台的 C# 编辑器:RoslynPad. Roslyn介绍 Roslyn是一个强大的.NET编译器实现,为C# ...
- C 2017笔试题
1.下面程序的输出结果是 int x=3; do { printf("%d\n",x-=2); }while(!(--x)); 输出:1 -2 解析:x初始值为3,第一次循环中运行 ...
- Golang sync.pool源码解析
Golang sync.pool源码解析 - sync.pool - 是什么 - 怎么用 - demo - 真实世界的使用 - 源码解读-数据结构 - 源码解读-读写流程 - 写流程 - 读流程 - ...
- 穿越周期!天翼云laaS+PaaS全年市场份额跃居中国公有云市场第三!
近日,国际数据公司(IDC)发布<中国公有云服务市场(2023下半年)跟踪>报告.中国电信天翼云在市场进入战略调整期的背景下,2023年H2实现公有云IaaS市场份额增长至12.9%,位居 ...
- 浅谈基于SASE的安全云服务
本文分享自天翼云开发者社区<浅谈基于SASE的安全云服务>,作者:姚****亮 SASE(secure access service edge安全访问服务边缘):是一种安全框架,结合了软件 ...
- 【忍者算法】从图书馆找书到矩阵搜索:探索二维矩阵中的高效搜索|LeetCode第240题 搜索二维矩阵 II
从图书馆找书到矩阵搜索:探索二维矩阵中的高效搜索 生活中的搜索策略 想象你在一个大型图书馆里找书.这个图书馆的书架是按照两个维度排列的:每个书架从左到右按书名字母顺序排列,从上到下的书架则按照出版年份 ...
- Docker部署 .Net程序
项目准备 首先创建一个项目,这里准备的是api项目,当然也可以是其他项目,按照自己需要的项目创建即可: 添加Dockerfile 接下来添加Dockfile文件,Dockerfile文件是Do ...