ubuntu 安装 emscripten 时 install latest 安装报错问题
学习官网参考:Compiling a New C/C++ Module to WebAssembly - WebAssembly | MDN (mozilla.org)
报错信息
形如:
Error: Downloading URL 'https://storage.googleapis.com/webassembly/emscripten-releases-builds/linux/b90507fcf011da61bacfca613569d882f7749552/wasm-binaries.tbz2': <urlopen error [Errno 104] Connection reset by peer>
error: installation failed!
OS:
$ uname -a
Linux jingqing 5.19.0-35-generic #36~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Feb 17 15:17:25 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
产生错误原因分析
emsdk install latest报错(因为从谷歌中下载,cmd中命令形式访问不到google)
版权声明:本文为CSDN博主「小白啥时候能进阶成功」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34754747/article/details/103815349
非常感谢博主的答疑解惑,不过我没有看得太懂原文中的解决方案,网上搜到的大多数方案也是 windows 环境下的解决方案,因此我决定自己写一个 ubuntu 系统下的补安装。
解决方案
说白了就是我自己复制链接到浏览器里,下载安装这几个包,放到 emsdk 的指定位置。
这里有两个要注意的点,这一部分主要是分析,不想看的同学可以直接跳到具体步骤处:
-
emsdk install 的默认安装规则是:不管你有没有安装过这些包,我 install latest 都是重新安装,保证最新版本。但是现在问题是 install latest 有问题,我要手动安装包放进去。
我们打开 emsdk.py 通过搜索关键词可以找到报错信息的位置:# ./emsdk.py:675# On success, returns the filename on the disk pointing to the destination file that was produced # On failure, returns None. def download_file(url, dstpath, download_even_if_exists=False, filename_prefix=''):debug_print('download_file(url=' + url + ', dstpath=' + dstpath + ')')file_name = get_download_target(url, dstpath, filename_prefix)if os.path.exists(file_name) and not download_even_if_exists:print("File '" + file_name + "' already downloaded, skipping.")return file_nametry:u = urlopen(url)mkdir_p(os.path.dirname(file_name))with open(file_name, 'wb') as f:file_size = get_content_length(u)if file_size > 0:print("Downloading: %s from %s, %s Bytes" % (file_name, url, file_size))else:print("Downloading: %s from %s" % (file_name, url))file_size_dl = 0# Draw a progress bar 80 chars wide (in non-TTY mode)progress_max = 80 - 4progress_shown = 0block_sz = 256 * 1024if not TTY_OUTPUT:print(' [', end='')while True:buffer = u.read(block_sz)if not buffer:breakfile_size_dl += len(buffer)f.write(buffer)if file_size:percent = file_size_dl * 100.0 / file_sizeif TTY_OUTPUT:status = r" %10d [%3.02f%%]" % (file_size_dl, percent)print(status, end='\r')else:while progress_shown < progress_max * percent / 100:print('-', end='')sys.stdout.flush()progress_shown += 1if not TTY_OUTPUT:print(']')sys.stdout.flush()except Exception as e:errlog("Error: Downloading URL '" + url + "': " + str(e))if "SSL: CERTIFICATE_VERIFY_FAILED" in str(e) or "urlopen error unknown url type: https" in str(e):errlog("Warning: Possibly SSL/TLS issue. Update or install Python SSL root certificates (2048-bit or greater) supplied in Python folder or https://pypi.org/project/certifi/ and try again.")rmfile(file_name)return Noneexcept KeyboardInterrupt:rmfile(file_name)exit_with_error("aborted by user, exiting")return file_name大致一看能看明白逻辑,如果 download_even_if_exists = True 那么无论包是否已经存在都要安装,否则为 False 就只安装不存在的包,我们需要为 False。
搜索函数名查看在哪里使用了这个函数:
# ./emsdk.py:1411received_download_target = download_file(url, download_dir, not KEEP_DOWNLOADS, filename_prefix)这个 KEEP_DOWNLOADS 是一个环境变量,默认为0,我们需要他为1,传入函数的参数则为0(False),即已存在文件不再重复下载。
在终端输入
./emsdk --help可以看到提示信息如下:Environment:EMSDK_KEEP_DOWNLOADS=1 - if you want to keep the downloaded archives.EMSDK_NOTTY=1 - override isatty() result (mainly to log progress).EMSDK_NUM_CORES=n - limit parallelism to n cores.EMSDK_VERBOSE=1 - very verbose output, useful for debugging.也就是说只要安装时单独指定此变量值为1即可。
-
第二步就是如何下载文件了。下载什么文件?放到哪个目录下?
这里大家可以通过 download_file 的 print debug 调试来查看他校验文件是否存在是去哪里校验的,我就不再具体展开讲调试步骤了,结论就是:他在 emsdk/downloads/ 目录下先查找一下待下载的压缩包是否存在,那么我们复制报错信息中的 url 下载文件到这个 downloads 文件夹下即可(没有就新建)。
具体步骤
-
首先要安装所缺的所有包,一个个安装,报错信息里提示什么安装什么。比如文章开头的报错信息中下载链接是:https://storage.googleapis.com/webassembly/emscripten-releases-builds/linux/b90507fcf011da61bacfca613569d882f7749552/wasm-binaries.tbz2,就先安装这个。
node: https://storage.googleapis.com/webassembly/emscripten-releases-builds/linux/b90507fcf011da61bacfca613569d882f7749552/wasm-binaries.tbz2
wasm-binaries: https://storage.googleapis.com/webassembly/emscripten-releases-builds/linux/b90507fcf011da61bacfca613569d882f7749552/wasm-binaries.tbz2
安装完成后要重命名 b90507fcf011da61bacfca613569d882f7749552-wasm-binaries.tbz2。
-
移入 emsdk/downloads 文件夹下,不用解压。
-
执行
EMSDK_KEEP_DOWNLOADS=1变量赋值。 -
执行
./emsdk install latest。
jingqing3948@jingqing:~/Webassembly/emsdk$ ./emsdk install latest
Resolving SDK alias 'latest' to '3.1.44'
Resolving SDK version '3.1.44' to 'sdk-releases-b90507fcf011da61bacfca613569d882f7749552-64bit'
Installing SDK 'sdk-releases-b90507fcf011da61bacfca613569d882f7749552-64bit'..
Skipped installing node-16.20.0-64bit, already installed.
Skipped installing releases-b90507fcf011da61bacfca613569d882f7749552-64bit, already installed.
All SDK components already installed: 'sdk-releases-b90507fcf011da61bacfca613569d882f7749552-64bit'.
好哎,看来是自己单独安装的文件包都可以用,他会自己解压文件包后提示 All SDK components already installed。
接下来就是下一步:./emsdk activate latest.
最后是 source ./emsdk_env.sh 配置好环境变量。
相关文章:
ubuntu 安装 emscripten 时 install latest 安装报错问题
学习官网参考:Compiling a New C/C Module to WebAssembly - WebAssembly | MDN (mozilla.org) 报错信息 形如: Error: Downloading URL https://storage.googleapis.com/webassembly/emscripten-releases-builds/linux/b90507fcf011da61bacfca613569…...
concrt140.dll丢失怎么恢复?教你5种修复方法
首先介绍一下concrt140.dll是什么 concrt140.dll是Microsoft Visual C Redistributable for Visual Studio 2015所需的一个动态链接库文件。它是用于支持C程序运行的重要组件之一。当系统中缺少或丢失concrt140.dll文件时,可能会导致一些程序无法正常运行。 首先&a…...
【Vue-Router】路由入门
路由(Routing)是指确定网站或应用程序中特定页面的方式。在Web开发中,路由用于根据URL的不同部分来确定应用程序中应该显示哪个内容。 构建前端项目 npm init vuelatest //或者 npm init vitelatest安装依赖和路由 npm install npm instal…...
蓝牙耳机运动耳机哪个好、好用的运动蓝牙耳机推荐
如今的蓝牙耳机已经成为手机的最佳伴侣,也是运动爱好者的必备装备。然而,在众多蓝牙耳机中做出选择可能会让人感到困惑。其实,在选购运动蓝牙耳机时需要注意的事项还挺多的,比如舒适度、稳定性和音质等多个方面,逐一对照这些要点来…...
大数据面试题:Kafka的ISR机制
面试题来源: 《大数据面试题 V4.0》 大数据面试题V3.0,523道题,679页,46w字 可回答:1)从ISR踢出去之后呢;2)一般Leader怎么判断Follower挂掉? 参考答案: …...
Windows:解决MySQL登录ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using passwor=YES)问题
我在下载的MySQL是8.0.32版本,刚下的时候没什么问题第二天启动MySQL服务就出现了 ERROR 1045 (28000): Access denied for user rootlocalhost (using password: YES) 或 ERROR 1045 (28000): Access denied for user rootlocalhost (using password: NO) 这样的问题…...
springboot整合kafka多数据源
整合kafka多数据源 项目背景依赖配置生产者消费者消息体 项目背景 在很多与第三方公司对接的时候,或者处在不同的网络环境下,比如在互联网和政务外网的分布部署服务的时候,我们需要对接多台kafka来达到我们的业务需求,那么当kafk…...
基于CentOS 7 配置nginx负载均衡
搭建负载均衡服务的需求如下: 1 ) 把单台计算机无法承受的大规模并发访问或数据流量分担到多台节点设备上,分别进行处理, 减少用户等待响应的时间, 提升用户体验。 2 ) 单个重负载的运算分担到多台节点设备上做并行处理ÿ…...
WordToPDF2.java
用Java将Word转PDF 本例子测试了spire.doc.free-3.9.0.jar的包 <dependency><groupId> e-iceblue </groupId><artifactId>spire.doc.free</artifactId><version>3.9.0</version></dependency> package word;import com.spire.…...
k8s服务注册发现
Service 是 将运行在一个或一组pod上的网络应用程序公开为网络服务的方法。 定义service前端为service名称、ip、端口等不变的部分,后端为符合标签选择的pod集合 注册 通过api server提交注册service请求到DNSservice随后得到clusterIP(虚拟ip地址&am…...
IK分词器升级,MySQL热更新助一臂之力
ik分词器采用MySQL热更新 官方所给的IK分词器只支持远程文本文件热更新,不支持采用MySQL热更新,没关系,这难不倒伟大的博主,给哈哈哈。今天就来和大家讲一下如何采用MySQL做热更新IK分词器的词库。 一、建立数据库表 CREATE…...
泛微 E-Office文件上传漏洞复现
声明 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 文章作者拥有对此文章的修改和解释权。如欲转载或传播此文章,…...
bug的生命周期
bug的生命周期 bugbug的生命周期bug等级 bug 当且仅当规格说明书是存在的并且正确的,程序和规格说明书之间的不匹配才是错误当产品规格说明书没有提到时,以用户需求为准,当程序最终没有实现用户的合理预期的功能要求时,就是软件错…...
mysql分库分表相关
3小时快速上手sharding-jdbc 百亿级数据 分库分表 后面怎么分页查询? Java实战:教你如何进行数据库分库分表...
云原生k8s---资源限制、探针
目录 一:资源限制 1、资源限制原因 2、Pod 和 容器 的资源请求和限制 3、CPU 资源单位 4、内存 资源单位 5、事例 (1)事例一 (2)事例二 二:重启策略 1、重启策略模式 2、事例 三:探针…...
html2canvas生成图片地址Base64格式转成blob在转成file(二进制)可正常发送(保姆教程,复制粘贴可用)
开始: 最终结果: 1. html2canvas方法生成的图片地址已Base64编码形式放在img标签src中可直接展示生成的图片(注意页面标签获取位置,还有个setTimeout页面渲染需要时间) setTimeout(function () {var result {};v…...
将Linux上的cpolar内网穿透配置为开机自启动——“cpolar内网穿透”
将Linux上的cpolar内网穿透配置为开机自启动 文章目录 将Linux上的cpolar内网穿透配置为开机自启动前言一、进入命令行模式二、输入token码三、输入内网穿透命令 前言 我们将cpolar安装到了Ubuntu系统上,并通过web-UI界面对cpolar的功能有了初步了解。当然cpolar除…...
微信小程序data-item设置获取不到数据的问题
微信小程序data-item设置获取不到数据的问题 简单说明: 在微信小程序中,通过列表渲染使用wx:for根据数组中的每一项重复渲染组件。同时使用bindtap给每一项绑定点击事件clickItem,再通过data-item绑定数据。 **问题:**通过data-i…...
创建百度百科需要什么条件?
随着互联网的发展,人们越来越依赖于搜索引擎获取信息。百度作为中国最大的搜索引擎之一,旗下的百科词条已成为人们获取知识的重要来源。创建百度百科需要什么条件呢?接下来伯乐网络传媒就来给大家讲一讲。 首先,你需要有一个百度…...
【springboot启动报错】java: 错误: 无效的源发行版:17
报错截图 解决方案 第一步:编辑配置,改为想用的jdk版本 第二步:文件--->项目结构,改为对应的SDK 第三步:文件--->设置--->构建、执行、部署--->编译器--->Java编译器,修改目标字节码版本 第…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
