当前位置: 首页 > 工具软件 > emscripten-qt > 使用案例 >

macOS 安装 emscripten补充爬坑

章鸿光
2023-12-01

Emscripten介绍

 Emscripten包含了将C/C++代码编译为WebAssembly所需的完整工具集(LLVM、Node.js、Python、Java等),它不依赖于任何其他的编译器环境。
 emsdk是一组基于Python 2的脚本,因此首先需要安装Python 2.7.12或更新版。

Emscripten的安装

以下是使用MacOS安装Emscripten所遇到的问题。

  1. 通过Git的clone命令下载emsdk
# 获取emsdk包
git clone https://github.com/emscripten-core/emsdk.git
 
# 进入文件夹
cd emsdk
  1. 运行以下的emsdk指令去从Github获取最新的工具并激活工具
重点1 Emscripten的安装需要下载外网的依赖,所以需要使用科学上网工具
# 获取最新的emsdk版本
git pull
 
# 下载和安装最新的工具(需要科学上网)
./emsdk install latest
 
# 激活工具
./emsdk activate latest
 
# 激活环境变量(需设置环境变量,会有提示的)
source ./emsdk_env.sh
  1. 运行看是否成功安装
apple@HarrydeiMac emsdk %  emcc -v
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 1.39.11
clang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project baa6f6a7828a46c37b96227282938717220f8b34)
Target: x86_64-apple-darwin19.3.0
Thread model: posix
InstalledDir: /Users/apple/github/emsdk/upstream/bin

在执行命令 ./emsdk install latest 过程中会遇到如下错误

xxxs-MacBook-Pro:emsdk StupidZhe$ emsdk install latest
Fetching emscripten-releases repository...
Repository 'https://chromium.googlesource.com/emscripten-releases' already cloned to directory '/Users/StupidZhe/IT/emsdk/releases', skipping.
Fetching latest changes to the branch 'master' for '/Users/StupidZhe/IT/emsdk/releases'...
Already up to date.
Successfully updated and checked out branch 'master' on repository '/Users/StupidZhe/IT/emsdk/releases'
Current repository version: "Fri, 12 Jul 2019 01:21:37 +0000 25df940fc1647cd6fec3593eeb9a439e2b3d1c0d"
Fetching all precompiled tagged releases..
Error downloading URL 'https://s3.amazonaws.com/mozilla-games/emscripten/packages/llvm/tag/osx_32bit/index.txt': <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)>
Error downloading URL 'https://s3.amazonaws.com/mozilla-games/emscripten/packages/llvm/tag/osx_64bit/index.txt': <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)>
Installing SDK 'sdk-releases-fastcomp-80bff2784f8500c1305ca69ba1d9fc84df0e401c-64bit'..
Installing tool 'releases-fastcomp-80bff2784f8500c1305ca69ba1d9fc84df0e401c-64bit'..
Error downloading URL 'https://storage.googleapis.com/webassembly/emscripten-releases-builds/mac/80bff2784f8500c1305ca69ba1d9fc84df0e401c/wasm-binaries.tbz2': <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)>
Traceback (most recent call last):
  File "/Users/StupidZhe/IT/emsdk/emsdk", line 2697, in <module>
    sys.exit(main())
  File "/Users/StupidZhe/IT/emsdk/emsdk", line 2679, in main
    success = tool.install()
  File "/Users/StupidZhe/IT/emsdk/emsdk", line 1540, in install
    success = tool.install()
  File "/Users/StupidZhe/IT/emsdk/emsdk", line 1556, in install
    success = download_and_unzip(url, self.installation_path(), download_even_if_exists=download_even_if_exists, filename_prefix=filename_prefix)
  File "/Users/StupidZhe/IT/emsdk/emsdk", line 1116, in download_and_unzip
    assert received_download_target == download_target
AssertionError

解决方式:

#命令行直接打开并编辑emsdk脚本
 vim emsdk.py
 
#然后在脚本import下插入两行代码
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

然后再执行./emsdk install latest还会提示No module named _ssl,然后我又查询了各种方式配置,结果最终被‘brew upgrade python3’ 完败,发现自己电脑的python版本低了。
提示ssl找不到的错误提示大致是这样的

···
import _ssl # if we can't import it, let the error propagate
ImportError: No module named _ssl
>>>

经过千山万水的阻挡最终成功了(完事后的汇总)

笔者安装Emscripten的目的是将c文件编译成.wasm文件。&

vim hello.c
#include <stdio.h>
int main(){
	printf("hello world");
	return 0;
} 

emcc hello.c -Os -s WASM=1 -s SIDE_MODULE=1 -o hello.wasm

 类似资料: