如何在浏览器中将 C++ 编译为 JavaScript?

Posted

技术标签:

【中文标题】如何在浏览器中将 C++ 编译为 JavaScript?【英文标题】:How do I compile C++ to JavaScript in a browser? 【发布时间】:2017-06-01 18:15:04 【问题描述】:

我知道Emscripten 和LLVM,但它们都不是用用于浏览器的javascript 编写的。

据我所知,这些工具是存在的,但它们尚未组合在一起,但我很可能遗漏了一些关键因素,导致在浏览器中将 C++ 编译为 JavaScript 变得非常困难。

所以我会提到我的幼稚实现:

    将 Emscripten 编译为 C,然后使用 Clang 将其编译为 LLVM,然后使用 Emscripten 将其编译为 JavaScript。 将 Clang 编译为 LLVM,然后通过 Emscripten 将其编译为 JavaScript。 编写一些 C++ 并通过 JavaScript Clang 运行它,然后通过 Emscripten 运行该 LLVM 以获取 JavaScript 运行生成的 JavaScript!

我确定我的步骤中遗漏了一些东西。请让我知道,如果社区有任何努力解决这些缺失的部分,请告诉我。


编辑:JSCPP 是我找到的最接近的,但它缺乏很多功能,坦率地说,作者通过尝试自己重写解析器等而不是使用现有工具进行了一项荒谬的工作.不过,很接近而且很整洁。

【问题讨论】:

只是为了澄清 - 你想让浏览器(客户端)将 C++ 编译为 JS 并执行它?所以本质上是创建类似 C++ 解释器的东西?你能详细说明你想要这个的场景吗? 我喜欢 C++,但你为什么要用勺子切肉呢? 虽然按照您的要求去做并非不可能,但您的推理和您在问题中列出的要点让我相信您误解了 C++(通常)是如何工作的。它通常是编译的,而不是直接执行的,因此源代码本身不会构成风险。将 C++ 代码发送到服务器,让它在其上运行 emscripten 并将生成的 JS 发送回客户端会容易得多。或者做其他人做的事,在你自己的机器上编译 我也在寻找这个并考虑了相同的解决方案。为什么?因为我想创建在网页上实时运行的交互式 C++ 学习教程,无需安装任何工具,也不需要特殊的服务器端服务。想想 jsfiddle/codepen 的静态页面版本,但适用于 C++。不太好的解决方案是将 emscripten 作为服务运行,将 C++ 发送到那里并提供生成的 JS,但我对资助该服务不感兴趣。 @Jason McCarrel,你到哪儿了吗? 这个问题已经死了,但我只想说——尝试过这样的事情(它是 C,不是 C++,但结果也很困难)你最好只需将代码上传到您的服务器,在沙箱中运行它,然后通过管道返回结果。类似于ideone.com。 【参考方案1】:

可以使用在浏览器中运行的self-hosting version of Emscripten 将C++ 编译为JavaScript,例如emception。

或者,可以使用x86 emulator in JavaScript 运行 C++ 编译器(甚至整个操作系统)。

【讨论】:

以上是关于如何在浏览器中将 C++ 编译为 JavaScript?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 yii2 中将应用资产编译为模块资产?

create-react-app 如何在构建过程中将特定的 .ts 文件编译为 .js 文件?

如何在不启动模拟器的情况下在 Eclipse 中将 Android 项目编译为 .apk 文件?

如何将 C++ 文件编译为 WebAssembly?

为啥我可以在 Mac OS X 上使用 Cython 编译为 C 但不能编译为 C++

如何将 .hex 文件反编译为 Arduino 的 C++?