标签: emscripten

将Python编译为WebAssembly

我已经读过可以将Python 2.7代码转换为Web程序集,但是我找不到关于如何这样做的明确指南.

到目前为止,我已经使用Emscripten及其所有必要组件为Web程序集编译了一个C程序,因此我知道它正在运行(使用指南:http://webassembly.org/getting-started/developers-guide/)

为了在Ubuntu机器上执行此操作,我必须采取哪些步骤?我是否必须将python代码转换为LLVM bitcode然后使用Emscripten进行编译?如果是这样,我将如何实现这一目标?

python emscripten webassembly

61
推荐指数
2
解决办法
4万
查看次数

如何处理传递/返回emscripten编译代码的数组指针?

我是Emscripten/javascript以及Overstack社区的新手.如果我的情况已经得到解决,我会事先道歉.

在Windows 7环境中,我使用emcc编译了一个简单的c程序,它接受一个数组并对其进行修改(见下文).

double* displayArray(double *doubleVector) {

   for (int cnt = 0; cnt < 3; cnt++) 
       printf("doubleVector[%d] = %f\n", cnt, doubleVector[cnt]);

   doubleVector[0] = 98;
   doubleVector[1] = 99;
   doubleVector[2] = 100;

   for (int cnt1 = 0; cnt1 < 3; cnt1++) 
       printf("modified doubleVector[%d] = %f\n", cnt1, doubleVector[cnt1]);

   return doubleVector;
}

int main() {

   double d1, d2, d3;
   double array1[3];
   double *array2;

   array1[0] = 1.00000;
   array1[1] = 2.000000;
   array1[2] = 3.000000;

   array2 = displayArray(array1);

   for (int cntr =0; cntr < 3; cntr++)
       printf("array1[%d] …
Run Code Online (Sandbox Code Playgroud)

javascript emscripten

30
推荐指数
2
解决办法
9293
查看次数

在Emscripten中使用Boost

我有一个c ++项目,我想转换为Web应用程序.为此,我想使用Emscripten来构建项目.

该项目使用一些外部库.我设法编译或找到大多数库的JavaScript版本,现在我陷入了Boost的困境.实际上我甚至不知道如何启动Boost:他们使用boostrap脚本生成文件来构建库.可以将工具集传递给此脚本,但显然不支持Emscripten.

我的项目使用Boost的以下部分:Thread,Regex,FileSystem,Signals,System.如何使用Emscripten编译这些库?

编辑

按照npclaudiu的回答,我用gcc工具包引导了库,然后编辑project-config.jam配置编译器,替换:

# Compiler configuration. This definition will be used unless
# you already have defined some toolsets in your user-config.jam
# file.
if ! gcc in [ feature.values <toolset> ]
{
    using gcc ;
}
Run Code Online (Sandbox Code Playgroud)

# Compiler configuration. This definition will be used unless
# you already have defined some toolsets in your user-config.jam
# file.
if ! gcc in [ feature.values <toolset> ]
{
    using gcc : : "/full/path/to/em++" ;
} …
Run Code Online (Sandbox Code Playgroud)

javascript c++ boost emscripten

26
推荐指数
3
解决办法
9010
查看次数

我可以以某种方式构建webassembly代码*而不使用emscripten"glue"吗?

我可以以某种方式创建一个ism文件,这将在MDN中描述(通过实例化对象并调用它们上面的函数)吗?

我能找到的所有指南(例如MDN上的这个指南)都建议使用emscripten; 但是,它还包括~70kB"胶水代码"(具有~50 kB可选文件系统仿真),它具有额外的逻辑(如检测节点/浏览器环境和自动提取等),可能还有其他一些仿真.

如果我不想要"粘合代码"并且想直接创建WASM(可能来自C代码,但可能是其他东西)怎么办?这可能吗?

javascript emscripten webassembly

19
推荐指数
5
解决办法
4750
查看次数

Emscripten - 支持纯html5画布的C++(不是WebGL)

使用emscripten时,有没有办法在C++下访问canvas 2D上下文?
我希望能够得出使用帆布的API功能,如简单的形状/路径lineTo,fillRect1D完成,等等.(所以基本上使用任何列出的功能在这里.

我将指出我宁愿不依赖SDL,但如果它是唯一可靠的方法,那么是否有办法强制它编译为JavaScript以便结果不会使用WebGL,而是基本的canvas api?

或者我应该按照这个建议做一个简单的api函数映射:从C/C++调用JavaScript

在任何人分享更好的解决方案之前,我很可能会完成映射并在我完成后立即在此处共享.

javascript c++ canvas emscripten

18
推荐指数
1
解决办法
6471
查看次数

将JS函数传递给Emscripten生成的代码

我有一段C++代码通过Emscripten转换为JavaScript.我希望转换后的C++代码能够回调调用它的JavaScript代码.就像是:

JavaScript的:

function callback(message) {
    alert(message);
}

ccall("my_c_function", ..., callback);
Run Code Online (Sandbox Code Playgroud)

C++:

void my_c_function(whatever_type_t *callback) {
    callback("Hello World!");
}
Run Code Online (Sandbox Code Playgroud)

这有可能吗?

javascript emscripten

17
推荐指数
3
解决办法
6205
查看次数

我可以使用Webassembly从磁盘读取文件吗?

我按照Webassembly入门教程http://webassembly.org/getting-started/developers-guide/

它运作良好,并显示"你好,世界!" 浏览器中的消息.

然后我尝试了一个小的C++代码,打开一个文本文件并在读取文件后进行计算(10*20).

emcc编译文件就好了,没有错误.

但是当我通过运行emrun通过HTTP提供文件时,它无法打开文件.

这是我在emrun Web控制台中看到的:

Unable to open file
200
Run Code Online (Sandbox Code Playgroud)

从本地磁盘打开文件有什么限制吗?

    [thiago@terra hello]$ cat pfile.cpp 
    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;

    int main() {
     string line;
     int a, b, c;
     ifstream myfile("test.txt");
     if (myfile.is_open()) {
      while (getline (myfile, line)) {
       cout << line << endl;
      }
      myfile.close();
     }
     else cout << "Unable to open file" << endl;
     a = 10;
     b = 20;
     c = a * b;
     cout << c << endl; …
Run Code Online (Sandbox Code Playgroud)

c++ emscripten webassembly

17
推荐指数
2
解决办法
7125
查看次数

将JS ArrayBuffer或TypedArray传递给没有复制的Emscripten

我在JavaScript中有一个非常大的ArrayBuffer(或TypedArray),我想传递给emscriptened函数.我想传递原始字节而不会产生副本.

如果我的C/C++函数采用std::string如下:

void processBuffer(std::string const& buffer)
Run Code Online (Sandbox Code Playgroud)

我可以获取数据,但是IIUC,转换std::string将产生缓冲区的副本.

有没有办法在没有副本的情况下传递原始缓冲区?
我的访问权限是严格只读的.

我试过了:

void processBuffer(const char* str, size_t size);
Run Code Online (Sandbox Code Playgroud)

设置allow_raw_pointers()EMSCRIPTEN_BINDINGS,但这似乎不起作用.
我错过了什么?

javascript c++ typedarray arraybuffer emscripten

16
推荐指数
1
解决办法
2060
查看次数

将JavaScript数组作为参数传递给WebAssembly函数

我想测试WebAssembly做一些复杂的数组计算.

所以我写了一个简单的C++函数,添加了两个int包含3个元素的数组:

// hello.cpp
extern "C" {

void array_add(int * summed, int* a, int* b) {
  for (int i=0; i < 3; i++) {
    summed[i] = a[i] + b[i];
  }
}

}
Run Code Online (Sandbox Code Playgroud)

并编译了这个:

emcc hello.cpp -s WASM=1 -s "MODULARIZE=1" -s "EXPORT_NAME='HELLO'" -s "BINARYEN_METHOD='native-wasm'" -s "EXPORTED_FUNCTIONS=['_array_add']" -o build/hello.js

其中包括a js和a wasm文件.我用以下html页面加载这些:

<!doctype html>
<html lang="en-us">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <script type="text/javascript" src="build/hello.js"></script>
    <script type="text/javascript">
      function reqListener () {
        // Loading wasm module
        var arrayBuffer …
Run Code Online (Sandbox Code Playgroud)

javascript c++ browser emscripten webassembly

15
推荐指数
2
解决办法
8689
查看次数

使用Emscripten编译的WebAssembly中的HmacSHA256

我正在尝试在WebAssembly中实现JWT令牌(仅编码),目标是拥有一个非常轻量级的 wasm模块.作为Web开发人员,我的C知识是有限的.现在我已经实现了以下功能(从JS移植)来编码url-safe Base64编码器,它完美地工作.

char _keyStr[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=";
char ret_val[200];

char* encode (char *data){
    int len = strlen(data);
    int i = 0;
    int j = 0;

    while(i<len){
        char chr1 = data[i++];
        int chr2Out = (i > len - 1)? 1:0;
        char chr2 = data[i++];
        int chr3Out = (i > len - 1)? 1:0;;
        char chr3 = data[i++];


        char enc1 = chr1 >> 2;
        char enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
        char enc3 = ((chr2 & …
Run Code Online (Sandbox Code Playgroud)

c sha256 jwt emscripten webassembly

15
推荐指数
2
解决办法
580
查看次数

标签 统计

emscripten ×10

javascript ×7

c++ ×5

webassembly ×5

arraybuffer ×1

boost ×1

browser ×1

c ×1

canvas ×1

jwt ×1

python ×1

sha256 ×1

typedarray ×1