首先,不论是在Windows、Linux还是Mac上,Webassembly的编译都是主要依赖于Emscripten SDK这个工具的。但是,在这里必须要吐槽一下,不论是WebAssembly官网WebAssembly中文网还是Emscriptem官网安装文档上给出的安装方式基本都是这样的(中文网主要是Windows上的安装,更简单一些):

  • 1、准备好git,cmake(这个好像可以没有)、python2.7这三样
  • 2、使用git从GitHub上clone下来一个48k的emsdk工程到本地、或者直接去下载压缩包也行,地址在官网(三家居然不一样,不过是同一个东西)
  • 3、下载下来之后,在这个emsdk工程里面远程安装真正的Emscripten工具链(install,active、env三步,看官网)

以上三步就完成了开发环境的搭建,看起来So easy,然而最好不要这么做,说多了都是泪。一二两步还没什么问题,但是第三步远程下载由于是从国外的网址(亚马逊)上下载资源,本来访问这种国外网站速度就慢,并且这个上百M的资源好像被放在某个犄角旮旯里,下载速度更是比蜗牛还慢,镜像资源又无处去找,稳定的dns也没有,然后在cmd黑窗口上下着下着,失败了。。。又失败了。。。又又失败了。或者完成了两步,又提示缺了个llvm,clang,python不识别等等依赖问题,简直无fu可说,官网说的Win10的Ubuntu子系统上安装更胜一筹。

所以,这种在线安装步骤并不适合广大的中国开发者。只好另寻它路,即下载离线安装包到本地再安装,虽然Emscripten官网上说不再推荐,然而也没办法,下载最新版emsdk-1.35.0-full-64bit.exe安装包,一路next就好了,这个虽然下载起来也慢,但还是可以成功的,并且它是一个完整的full包,包含了clang、java、node、python等一堆东西,不会有依赖问题。这里贴个我的网盘地址,提取码:frte ,里面有git2.2,python2.7、cmake3.11、emsdk1.35,有需要的可以直接下载(如果还能用的话)。

安装好了之后运行emsdk_env.bat会自动配置相关的环境变量,注意这步操作可能会被杀毒软件拦截,记得放行,或者手动配置也行,反正结果是这样:

然后检验一下有没有成功

安装好了环境,就可以愉快的写个Hello World尝试一下了。

C代码:

1 #include<stdio.h>
2
3 int main(int argc, char ** argv){
4 printf("Hello, world!");
5 }

为了保险起见,安装个开发C/C++环境的VS2017,然后直接用VsCode/VS2017等编辑器写好保存为.c文件就可以了,按官网的echo写法又报c头文件找不到错误( ̄_ ̄|||)

然后按官网编译命令,开始编译:

emcc hello.c -s WASM=1 -o hello.html

时间可能有点长,并且又报了几个警告,好在有惊无险的完成了,结果是这样的:

一个hello world居然有480k,包含了那些没用的东西,还需要研究一下。

然后按官网的启动服务命令,起个http服务,就可以自己访问一下了:

emrun --no_browser --port 8080 C:\Users\JiXiaoHua\Desktop\hellowasm\hello.html

注意后面要加参数为具体的hello.html文件路径,不然用 http://localhost:8080/hello.html 访问会404,资源找不到,默认会从桌面路径去找。

启动服务时报了个No module named win32api错误,解决方法:在Python中使用Win32api报错的问题,No module named win32api

服务启动成功页面:

然后 http://localhost:8080/hello.html 访问结果是这样的:

浏览器控制台输出

看起来好像把原本的hello.exe嵌入到了网页中,很神奇有木有,这便是WebAssembly说的在Web端运行C/C++程序了。

当然,这是运行编译为WebAssembly的程序的一种方法。另一个选择通过js来调用,参考文章使用JavaScript调用WebAssembly函数部分。

然后后台有条警告:

The html page you are running is not emrun-capable. Stdout, stderr and exit(returncode) capture will not work. Recompile the application with the --emrun linker flag to enable this, or pass --no_emrun_detect to emrun to hide this check.

您运行的html页面不支持emrun。 stdout,stderr和exit(returncode)捕获将无法正常工作。 使用--emrun链接器标志重新编译应用程序以启用此功能,或者将--no_emrun_detect传递给emrun以隐藏此检查。

好像并不影响,OK,到此结束。

WebAssembly学习(二):Windows10下WebAssembly C/C++编译环境的搭建与Hello World尝试的更多相关文章

  1. Windows下QT4.8.4编译环境的搭建(转载http://blog.csdn.net/bestgonghuibin/article/details/38933141)

    开始使用QT了,所以第一步就是把环境搭起来,这里小记一下,以免以后忘记. 1. 下载安装文件 要使用QT功能,那么必须要下载QT的源码,还必须要一个是用QT的编译环境,可以是VS2010,也可以是专用 ...

  2. WebAssembly学习(一):认识WebAssembly

    WebAssembly作为一门新兴起的技术,在 JavaScript 圈非常的火!人们都在谈论它多么多么快,怎样怎样改变 Web 开发领域,被各大巨头所推广,这篇文章对其做一个简单的了解认识,本文非原 ...

  3. Linux学习心得之 Linux下命令行Android开发环境的搭建

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Linux学习心得之 Linux下命令行Android开发环境的搭建 1. 前言2. Jav ...

  4. SAAS云平台搭建札记: (二) Linux Ubutu下.Net Core整套运行环境的搭建

    最近做的项目,由于预算有限,公司决定不采购Windows服务器,而采购基于Linux的服务器. 一般的VPS服务器,如果使用Windows系统,那么Windows Server2012\2016安装好 ...

  5. Cocos发展Visual Studio下一个libcurl图书馆开发环境的搭建

    我们解释win32在Visual Studio下一个libcurl图书馆开发环境的搭建.Cocos2d-x发动机实际上与Win32在访问libcurl库.Cocos2d-x 3.x在libcurl库文 ...

  6. linux下arm平台Qt编译环境搭建与解析

    一.概述:      我们知道QTcreator.这仅仅是个IDE,他包含了一个编译器--qmake.这两者的关系与codeblocks和g++的关系一样,首先要明确这些.      而我们在linu ...

  7. Mac下设置Android源代码编译环境

    在Mac下编译Android最麻烦的就是设置Android的编译环境了,做完这一步基本上剩下的就是近乎傻瓜式的操作了.说起来也简单就三步,设置大小写敏感的文件系统.安装编译工具.设置文件系统同时能打开 ...

  8. Win7下qt5.3.1+opencv2.4.9编译环境的搭建(好多 Opencv2.4.9源码分析的博客)

      到官网下载qt-opensource-windows-x86-mingw482_opengl-5.3.1.exe文件,执行该文件,选择默认安装即可实现QT的安装(安装在C盘的根目录下),该文件封装 ...

  9. Windows Sublime Text 配置Linux子系统(WSL)下的 gcc/g++ 编译环境

    0. 简介(若已了解背景可以跳过此部分) Windows 10 Build 14316以上版本中加入了"Windows系统的Linux子系统"(Windows Subsystem ...

随机推荐

  1. jmeter出现乱码怎么解决

    本文是抄袭安大叔的性能    如果想在性能获得更好的发展  请添加公众号:测试那点事  大叔的群号:435092293  大叔曾经担任百度技术总监  很牛逼  相信大叔知道了不会怪我  毕竟我是你的学 ...

  2. ios高效开发二--ARC跟block那点事

    block是可以捕捉上下文的特殊代码块. block可以访问定义在block外的变量,当在block中使用时,它就会为其在作用域内的每个标量变量创建一个副本. 如果通过self拥有一个block,然后 ...

  3. Project Euler 43 Sub-string divisibility

    题意: 1406357289是一个0至9全数字数,因为它由0到9这十个数字排列而成:但除此之外,它还有一个有趣的性质:子串的可整除性.记d1是它的第一个数字,d2是第二个数字,依此类推,我们注意到: ...

  4. [洛谷 P2365] 任务安排 (线性dp)

    3月14日第二题!! 题目描述 N个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间 ...

  5. Java中发邮件的6种方法

    1.官方标准JavaMail Sun(Oracle)官方标准,功能强大,用起来比较繁琐. 官方资料:http://www.oracle.com/technetwork/java/javamail/in ...

  6. BA--三相异步电机_星三角降压启动

    星一三角启动就是一种简单方便的降压启动方式,同时还可通过手动和自动操作控制方式实现. 星三角起动的优点还是很显著的,因为同任何别的减压起动器相比较,其结构最简单,价格也最便宜 除此之外,星三角起动方式 ...

  7. oracle schema彻底理解

    oracle中的Schema简析 在一个数据库中可以有多个应用的数据表,这些不同应用的表可以放在不同的schema之中,同时,每一个schema对应一个用户,不同的应用可以以不同的用户连接数据库,这样 ...

  8. leetcode_Isomorphic Strings _easy

    Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...

  9. eclipse转Android studio遇到的那些坑

           公司项目有导入10多个libray,还有涉及ndk,转Android studio时碰到不少问题.前后大概花费5个工作日,中间各种奇葩bug,各种编译出错,非常多还有没错误提示.一度想过 ...

  10. 并行编程(1) - sum.msic.Unsafe 一

    相信看过java源代码的同学.对 sum.msic.Unsafe 这个类并不陌生,特别是在java.util.concurrent包有非常多的使用. sum.msic.Unsafe源代码:      ...