问题标签 [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.

0 投票
3 回答
8895 浏览

ubuntu - 在 Ubuntu 上安装 Emscripten

我正在尝试在 Ubuntu 上安装 Emscripten,但 Emscripten的官方安装指南没有提供在 Linux 上安装 Emscripten 的任何说明。安装指南必须提供的唯一建议是:

If you are on Linux, things should be very simple for you and there is no need for any additional guide.

我也阅读了 Emscripten 存储库中的 README.md 文件,它也没有为 Ubuntu 提供任何说明。为了在 Ubuntu 上设置 Emscripten,我需要遵循哪些步骤?

0 投票
2 回答
1992 浏览

makefile - Emscripten“权限被拒绝”,即使我 sudo enmake

我在玩 emscripten,我不断收到这个令人困惑的信息

但即使我使用sudo我也会得到同样的错误:

我在 sudoer 的名单上,我有 root 访问权限……但无论我做什么,我都会被拒绝。有任何想法吗?

0 投票
1 回答
1054 浏览

javascript - Javascript/Jasmine:ReferenceError:找不到变量:Float64Array

我正在使用 rails,对 javascript 来说非常新,并设置我的测试框架来测试我的 javascript Jasmine。情况如下:

  • Viz.js在我的源代码中使用,它被Graphviz编译为 JSEmscripten
  • 我在用着jasmine-rails
  • jasmine从浏览器成功构建
  • 但是,jasmine:headless(它使用 Qt webdriver(我使用 Qt 版本 4.8.1)),给出以下错误:

    ReferenceError: Can't find variable: Float64Array

来自 Viz.js

所以我的问题是:我可以断定 Qt 中存在错误Float64Array吗?emscripten 做的很乱吗?有解决方法吗?

0 投票
1 回答
1974 浏览

llvm - 无法使用 Emscripten 编译 GMP 库

我已经用最新版本的 Emscripten 尝试了这里的说明:https ://github.com/kripken/gmp.js/blob/master/README.markdown

.a 文件似乎已正确创建。然后我尝试针对该库进行编译(在调试模式下),这似乎有效:

但是,当我尝试运行生成的 Javascript 时,出现此错误:

Alon(Emscripten 的创建者)在 Emscripten Google Group 上表示,这意味着该功能不存在,并检查 llvm-vm,它似乎是:

所以我完全不知所措!

可能值得注意的是,在使用常规编译器构建时针对库编译测试可以正常工作。

编辑:进一步了解这一点。在这个库的 5.1.1 版本中,他们引入了一个新的配置选项“--dissable-assembly”,它执行通用 C 编译。

现在的问题是,当测试运行时,它永远不会停止。

建议我在 gmp.h 中“禁用”LIKELY 和 UNLIKELY 选项:

https://github.com/kripken/gmp.js/blob/master/gmp-h.in

但我不知道如何“禁用”它们。通常有 0 或 1 选项,但我在这里看不到。我什至不明白这个特定选项的作用。

谢谢

马科斯

0 投票
1 回答
3267 浏览

filesystems - Emscripten 使用文件系统 FS

我想知道如何FS在 Emscripten 中使用。我想我已经完成了 wiki 中提到的所有事情,但我仍然得到Uncaught ReferenceError: FS is not defined. 如果我在生成的 *.js 文件中搜索文字FS没有出现,我认为应该有。

这是我到目前为止的代码。

信息媒体.cpp

编译

emcc -s EXPORTED_FUNCTIONS="['_int_sqrt']" InfoMedia.cpp -o InfoMedia.js

结果在InfoMedia.js@pastebin

init_fs.js

示例.html

在 chrome preRun 中运行它后,我得到了错误。

另外,如果我尝试在编译时嵌入文件

emcc -s EXPORTED_FUNCTIONS="['_int_sqrt']" --embed-file gizmo.webm InfoMedia.cpp -o InfoMedia.js

我得到这个错误Uncaught TypeError: Object #<Object> has no method 'FS_createDataFile'

它在我生成的 js 文件中,位于这一行http://pastebin.com/Mu1qfG25 @ line 1460 Module['FS_createDataFile']('/', 'gizmo.webm', [26, 69, 223,....]), true, true);

FS 永远不会插入到生成的 js 文件中。所以我怎么称呼那些FS东西并不重要。我需要添加任何编译器选项来插入该库功能吗?

0 投票
2 回答
1109 浏览

c++ - 确定 clang 和 cmake 定义了哪些宏的最佳方法

我目前正在尝试通过使用名为 Emscripten 的惊人 LLVM->Javascript 项目将 CGAL 转换为 Javascript。我只是用核心组件做这个(不是 ImageIO 或 Qt 的东西)

我已经设法通过它的两个依赖项(GMP 和 MPFR)来做到这一点。令我惊讶的是,我能够将 C 测试类编译为 Javascript(针对以位码形式生成的 LLVM 库),在 nodejs 中运行的输出与本机结果精确匹配。

所有其他依赖项都是仅标头(Eigen,Boost),除了一个 - libboost-thread。现在,显然 JS 是单线程的,所以希望能够从 CGAL 代码中删除它。幸运的是,我定义了一个 CGAL_HAS_NO_THREADS 宏:

这似乎确实作为 -D 选项传递给命令行

但是,当我尝试使用 clang 进行编译时(通过设置 clang 的 Emscripten 工具运行 cmake 进行设置),我得到了一大堆使用 gcc 编译时没有得到的错误,这似乎是双重的:

1)首先是这样的:

这给了我一个“未知的字节顺序”错误。我认为是由于 clang 编译器没有定义GLIBC宏?

另一个是这样的:

这似乎归结为使用不同的补丁(或一组路径,或路径顺序)来查找库。

现在这两件事显然我可以一点一点地破解 - 但我猜这不是“正确”的方式。

我遇到的麻烦是知道在运行clang(甚至gcc)时定义了哪些宏?我也不确定 /usr/include/ 的根目录中包含的所有内容是什么?

我知道其中一些是 GNUC,这在某种程度上与 std libc 和 libcxx 库不同?但不是全部?

任何帮助 - 非常感谢。

马科斯

0 投票
1 回答
240 浏览

emscripten - Emscripten全语言编译推荐环境

我想使用 Emscripten将基于 C 的语言编译成 javascript。此处此处的文档表明成功率在一定程度上取决于环境。幸运的是,借助虚拟化,可以轻松启动工作所需的任何环境。谁能建议什么 linux 风格是编译大型项目的最佳选择?欢迎任何其他相关提示。

0 投票
6 回答
12354 浏览

javascript - Using Boost with Emscripten

I have a c++ project I would like to convert to a web application. For this purpose, I would like to use Emscripten to build the project.

The project uses some external libraries. I managed to compile or find the JavaScript version of most libraries and now I am stuck with the Boost ones. Actually I do not even know how to start for Boost: they use a boostrap script to generate the files to build the libraries. It is possible to pass the toolset to this script but Emscripten is obviously not supported.

My project uses the following parts of Boost: Thread, Regex, FileSystem, Signals, System. How can I compile these libraries using Emscripten?

Edit

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

现在,打字./b2有效地构建了库。Boost.Signals 和 Boost.System 编译良好。其他的有一些错误。

Boost.Thread 抱怨:

Boost.Regex 抱怨很多关于 CHAR_BIT 未声明的问题,但这似乎是 emscripten 中的一个问题:

Boost.FileSystem 似乎也因 emscripten 而失败:

0 投票
2 回答
8159 浏览

emscripten - 与 Emscripten 中的 C++ 类交互

Emscripten 教程很好地解释了如何与 C 函数交互:https ://github.com/kripken/emscripten/wiki/Interacting-with-code

但是你如何与 C++ 类交互:

  • 调用构造函数创建对象
  • 删除一个对象
  • 防止类及其方法的死代码消除
0 投票
1 回答
1673 浏览

boost - cmake找不到提升线程

我正在尝试使用 emscripten 将一些项目编译为 js。该项目使用 cmake 作为构建工具。

这就是我调用 cmake 的方式:

这就是我在 /home/mnowotka/Documents/boost_1_53_0/stage/lib 目录中的内容:

这就是我从 cmake 得到的:

我只有一个问题:为什么?

我做错了什么?这让我发疯......

(顺便说一句:如果我设置Boost_USE_STATIC_LIBSBoost_USE_STATIC_RUNTIME ONOFF- 它也不起作用......)