我已经读过可以将Python 2.7代码转换为Web程序集,但是我找不到关于如何这样做的明确指南.
到目前为止,我已经使用Emscripten及其所有必要组件为Web程序集编译了一个C程序,因此我知道它正在运行(使用指南:http://webassembly.org/getting-started/developers-guide/)
为了在Ubuntu机器上执行此操作,我必须采取哪些步骤?我是否必须将python代码转换为LLVM bitcode然后使用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) 我有一个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) 使用emscripten时,有没有办法在C++下访问canvas 2D上下文?
我希望能够得出使用帆布的API功能,如简单的形状/路径lineTo,fillRect1D完成,等等.(所以基本上使用任何列出的功能在这里.
我将指出我宁愿不依赖SDL,但如果它是唯一可靠的方法,那么是否有办法强制它编译为JavaScript以便结果不会使用WebGL,而是基本的canvas api?
或者我应该按照这个建议做一个简单的api函数映射:从C/C++调用JavaScript?
在任何人分享更好的解决方案之前,我很可能会完成映射并在我完成后立即在此处共享.
我有一段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)
这有可能吗?
我按照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) 我在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,但这似乎不起作用.
我错过了什么?
我想测试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) 我正在尝试在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) 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