javascript作为高级语言,没有“编译”过程,意思是说它进行的是jit技术,边解释边运行的方式运行。
WebAssembly
它不是直接的机器语言,因为世界上的机器太多了,它们都说着不同的语言(架构不同),所以很多情况下都是为各种不同的机器架构专门生成对应的机器代码。但是要为各种机器都生成的话,太复杂了,每种语言都要为每种架构编写一个编译器。为了简化这个过程,就有了“中间代码(Intermediate representation,IR)”,只要将所有代码都翻译成 IR,再由 IR 来统一应对各种机器架构。
详细的介绍看:
https://blog.csdn.net/TurkeyCock/article/details/83317914?tdsourcetag=s_pctim_aiomsg
https://segmentfault.com/a/1190000016437116?tdsourcetag=s_pctim_aiomsg
安装Emsdk
系统环境Centos7
在下载源码之前先更新一下这些东西,否则后续编译会报错。
gcc/g++ 初始带的版本低,更新到最新:
cd usr/src
wget 'http://mirrors-usa.go-parts.com/gcc/releases/gcc-7.2.0/gcc-7.2.0.tar.gz'
tar xvf gcc-7.2.0.tar.gz
mkdir gcc7objdir
yum install gmp-devel
yum install mpfr-devel
yum install libmpc-devel
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.15.tar.bz2
yum install bzip2
tar -jxvf isl-0.15.tar.bz2
cd isl-0.15
./configure
make
make install
cd ../gcc7objdir/
../gcc-7.2.0/configure --prefix=/usr/local/gcc7 --enable-checking=release --enable-languages=c,c++,go --disable-multilib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
make -j3(线程根据电脑配置,设置的太多会卡死)
make install
sudo ln -s /usr/local/gcc7/bin/gcc /usr/bin/gcc
sudo ln -s /usr/local/gcc7/bin/g++ /usr/bin/g++
rm -rf /usr/bin/gcc
rm -rf /usr/bin/g++
gcc -v
安装Cmake
wget https://cmake.org/files/v3.6/cmake-3.6.2.tar.gz
tar xvf cmake-3.6.2.tar.gz && cd cmake-3.6.2/
./bootstrap
gmake
gmake install
/usr/local/bin/cmake --version
yum remove cmake
ln -s /usr/local/bin/cmake /usr/bin/
cmake --v
安装node
cd /usr/local/src
wget https://npm.taobao.org/mirrors/node/v10.13.0/node-v10.13.0.tar.gz
tar xvf node-v10.13.0.tar.gz
cd node-v10.13.0/
./configure
make
这是即使更新了gcc,但也可能会报错。
/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found
/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found
在电脑里面查看是否有更高版本的libstdc++.so.6的文件
locate libstdc++.so.6
strings /usr/src/gcc7objdir/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.24 | grep GLIBCXX
查看连接位置
ll /usr/lib64/libstdc++.so.6
删除以前连接
rm -f /usr/lib64/libstdc++.so.6
连接找到的新文件
ln -s /usr/lib64/libstdc++.so.6.0.24 /usr/lib64/libstdc++.so.6
之后就可以安装emsdk了
git clone https://github.com/juj/emsdk.git
cd emsdk
git pull
./emsdk install latest
./emsdk activate laatest
source ./emsdk_env.sh
这样没有出错的情况下,装好大概需要一天时间。