将 C++ 代码(本机客户端)移植到浏览器(Web 应用程序)

Porting c++ code (native client) to browser (Web app)

我有一个使用 Qt-creator SDK 编写的 c++ 模块。我想将此代码移植到任何网页上的 运行,而不会将源代码泄露给最终用户。用户应该能够在任何浏览器(Chrome、Firefox、Safari、Explorer)上看到该模块的输出,而无需安装任何额外的浏览器插件。有什么更好的选择可以实现这一目标。我用谷歌搜索并发现了几个这样的选项:

  1. Google 本机客户端 (NaCl) - 但它 运行 仅适用于 Chrome。这是 Web 应用程序的未来吗??
  2. PPAPI - 不确定是否与 NaCl 相同
  3. NPAPI - 几乎被废弃
  4. Emscripten - 它将 c++ 转换为 js。因此用户可以看到源代码。
  5. WebAssembly

还有其他选择可以实现我想要的吗?如果不是,我应该从以上选项中选择哪一个!?提前谢谢了。一个

一些说明:

  1. Chrome 以外的浏览器不支持 NaCl。我们(Google 的 NaCl/WebAssembly 团队)未来更关注 WebAssembly。
  2. PPAPI 是 NaCl 使用的 API 集。
  3. NPAPI:即将退出,无论如何都需要安装插件。
  4. Emscripten。它确实将 C++ 编译为 JS,但我不会说它向用户透露了您的源代码。它通过通常的编译和优化过程进行了重大改造,我想说它更接近机器代码而不是源代码。此外,我们正在为 emscripten 添加 WebAssembly 支持,这样您就可以使用相同的源代码为那些支持它的浏览器生成 WebAssembly,并为那些还不支持它的浏览器生成 asm.js。
  5. WebAssembly 是未来,将满足您的所有标准,但需要注意的是,wasm 可用的浏览器 API 和功能与 JavaScript 可用的浏览器 API 和功能相同。因此,例如,您将无法无限制地访问用户的文件系统。所有 4 大浏览器供应商都在实现 webassembly,但它应该首先出现在 Chrome 和 Firefox 中,因为这些浏览器的发布时间表与其各自的操作系统是分离的。

我的建议是尝试使用 emscripten 移植您的代码。您可以从今天开始并使用 asm.js,当 WebAssembly 启动时,您可以用最少的额外努力来定位它。未来会有其他支持 wasm 的工具链和语言,但今天 emscripten 确实是唯一现成的选择。