问题标签 [emscripten]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - asm.js 对编译器的限制
我想知道 asm.js 规范中是否有任何“设计限制”会阻止任何编译器直接从中生成本机汇编代码。
目前,firefox 的速度似乎是本机代码的一半,但我想知道为什么它不能以本机速度运行。如我所见,asm.js 与 asm 非常相似。
javascript - 如何将 emscripten 浏览器输入法从 window.prompt 更改为更明智的方法?
我有一个 C++ 函数,它曾经被调用消耗来自标准输入的输入。使用 emscripten 将此函数导出到 javascript 会导致调用 window.prompt。
与浏览器提示交互确实是一项繁琐的任务。首先,您一次只能粘贴一行。其次,指示 EOF 的唯一方法是按“取消”。最后但并非最不重要的唯一方法(在我的函数的情况下)使其停止通过 window.prompt 要求用户输入是通过选中复选框以防止弹出更多提示。
对我来说,最好的输入法是阅读一些 blob。我知道我可以破解 library.js,但我发现了一些问题:
- 读取 blob 是异步的。
- 要读取 blob,首先您必须打开一个用户必须先选择的文件。
- 我真的不知道如何阻止我的函数永远读取这个 blob - 没有像 window.prompt 这样的复选框,我不确定如果在 window.prompt 情况下没有发现 EOF 是否会阻止它(仅检查复选框有帮助)。
最好的解决方案是某种回调,但我希望从更有经验的用户那里看到一些提示。
icu - 由于缺少 findBasename,构建 icu4c 失败
我尝试通过Emscripten ( clang )交叉编译icu4c 51.1
它可以很好地编译大多数源代码,但失败了
所以我想知道,它试图在哪里找到findBasename
以及这些数据编译的全部内容。
编辑:
错误消息来自icupkg
使用 clang 构建,在这种情况下没有意义。如何指定库是用clang构建的,而工具是用另一个编译器构建的?
javascript - 如何在命令行上将文件名传递给 emscripten 编译的节点脚本?
我在使用 emscripten 编译的 C 程序中打开用户指定的文件时遇到问题(并且正在通过节点运行)。采取这个简单cat
的类似程序:
我用emscripten成功编译了这个:
它运行,并期望一个参数:
但是当我给它这个论点时,它会抱怨:
以下是令人讨厌的编译后的 JavaScript:
错误消息(第 624 行)中的问题行是带有String.fromCharCode.apply
.
相关软件版本:
最终我也想在浏览器环境中加载文件......我知道这是一个完全不同的球赛,文件预加载等......现在我只想让命令行工作!
更新添加:查看https://github.com/kripken/emscripten/wiki/Filesystem-Guide后,我尝试预加载文件并得到不同的错误:
这是否意味着我需要在浏览器中运行它?
再次更新添加:
浏览器窗口显示“Preparing...”,控制台日志显示错误:
...然后最后四行——从“仍在等待运行依赖项:mycat.htm”开始——每隔几秒重复一次。
我是否需要以某种方式在 javascript 端使用 FS 准备这些文件系统调用?
compiler-construction - 可以修改 TCC 以使用 Emscripten 编译吗?如果没有,我在哪里可以找到一个生成 x86 的 C 编译器?
解压缩后tcc-0.9.26
,我编辑配置以指向emcc
而不是gcc
和在emar
而不是ar
。接下来,我取消注释 in 的包含,ucontext
因为tcc.h
它似乎只需要用于tccrun
. 现在我禁用了所有的内置函数(sub_ddmmss 等)lib/libtcc1.c
,但我得到一个错误,因为 Emscripten 试图编译一个程序集源文件(alloca 的实现),我不知道如何解决这个问题。
javascript - 当 asm.js 比普通的 JS 代码快时,我为什么要在 JS 中编写新代码?
Emscripten 可以从 C/C++ 生成比手工编写的 JS 代码更快的代码,这是否意味着我们应该用 C/C++ 编写新代码并编译它们以在 Web 上运行?
我阅读了 Emscripten 常见问题解答,上面写着“无论如何都要编写新的 JavaScript 代码。”,这是为什么呢?
emscripten - 如何从 javascript 访问 Emscripten 类型数组?
我使用 Emscripten 将 C 库编译成 javascript 代码。但是,当我尝试将它与我的 Javascript 包装器绑定时遇到了问题。
我写这个是为了通过引用传递它,我可以通过编译的库来访问它。
但是,我无法将其恢复为正常的 javascript 字符串......返回值是一个空字符串。
如何将其转换回 javascript 字符串?e
javascript - 将 FTGL 与 Emscripten 一起使用
我正在尝试使用 emscripten 构建一个项目(logstalgia),但该项目需要 ftgl 开发库(libftgl-dev)。我一直在寻找链接这个库的正确方法,以便我可以运行shell> emconfigure logstalgia/configure
,但我不知道如何编译这个库并将其链接到项目中。
我已经阅读了 emscripten 文档,但不幸的是,我已经有好几年没有使用 gcc 或编写 makefile 了。
Emscripten 说"Other libraries not included with emscripten, like boost, you would need to compile yourself and link with your program, just as if they were a module in your project."
不幸的是,我没有足够的先前知识来知道这要我做什么。我了解这个概念,但不知道如何执行此操作。任何帮助,将不胜感激。
c++ - 指向 std::array 成员的指针
假设我有一个结构,其中包含另一个结构类型的对象数组,如下所示:
是否可以可移植地编写一个表达式,该表达式将评估给定数组元素的给定属性的指向成员的指针?像&bar::foos[2]::x
什么?
该应用程序是embind:如果可能,我想将这样的嵌套 C++ 类型映射到线性 JavaScript 元组。如果使用指向成员的指针不起作用,那么我可能会尝试使用 getter 和 setter 方法,但我仍然想知道是否有办法获得这样的指向成员的指针。
operating-system - 推荐一个简单的 x86 模拟器和操作系统
作为一个个人学习项目,我想将现有的 x86 模拟器库移植到 JavaScript,然后在其上运行一个非常简单的操作系统。
我对该库的唯一要求是它应该用 C\C++ 编写,因为我想使用 emscripten 和 asm.js 将源文件编译为 JavaScript。该库至少应该能够解释 x86 操作码;JavaScript 的特定环境细节(内存、GUI、中断等)我可以自己实现。操作系统没有任何要求,只要足够简单并且可以在模拟器上运行即可。
到目前为止,在我的研究中,Softx86似乎是最可行的解决方案,因为它似乎很容易移植到 JavaScript(它只进行 CPU 仿真)。我能找到的最简单的 16 位实模式操作系统是MikeOS,唯一的问题是它需要 386 处理器,Softx86 无法模拟,我不确定它们是否完全兼容。
我的问题是,是否有人知道模拟器-OS 的替代组合,它足够简单,可以移植到 JavaScript。