有没有办法在JavaScript中使用C++



由此,我发现JavaScript是用C++编写的。我还发现/推断出大多数JavaScript都是C++的(例如 Math.atan+""Math.atan.toString()产生"function atan() { [native code] }")。我假设[native code是C++,否则"隐藏"它有什么意义?

我的问题有没有办法在 JavaScript 中使用C++?要在函数或JavaScript平台中使用它?

emscripten 项目允许您从 C 生成 Javascript,C++:

Emscripten是一个LLVM-to-JavaScript编译器。它需要LLVM位码 - 可以从C/C++生成,使用llvm-gcc(DragonEgg)或 clang,或任何其他可以转换为LLVM的语言 - 和 将其编译成JavaScript,可以在Web上运行(或 JavaScript 可以运行的其他任何地方)。

通过 ccall 和 cwrap 等方法,你可以调用 C 函数:

使用站点中的示例,此代码C++使用extern "C"来防止名称重整的代码:

#include <math.h>
extern "C" {
int int_sqrt(int x) {
  return sqrt(x);
}
}

可以这样编译:

./emcc tests/hello_function.cpp -o function.html -s EXPORTED_FUNCTIONS="['_int_sqrt']"

并在Javascript中使用:

int_sqrt = Module.cwrap('int_sqrt', 'number', ['number'])
int_sqrt(12)
int_sqrt(28)

Embind 可用于C++函数和类。该网站的快速示例如下:

// quick_example.cpp
#include <emscripten/bind.h>
using namespace emscripten;
float lerp(float a, float b, float t) {
    return (1 - t) * a + t * b;
}
EMSCRIPTEN_BINDINGS(my_module) {
    function("lerp", &lerp);
}

并编译:

emcc --bind -o quick_example.js quick_example.cpp

并在Javascript中使用:

<!doctype html>
<html>
  <script src="quick_example.js"></script>
  <script>
    console.log('lerp result: ' + Module.lerp(1, 2, 0.5));
  </script>
</html>

WCPP 是一个包,可让您将C++几乎直接导入到 Node 项目中。免责声明:我是这个项目的维护者。

我们的C++

// addTwo.cpp 
export int addTwo(int a, int b) {
  return a + b;
}

在终端中

$ wcpp

我们的 JavaScript

const ourModule = await require('wcpp')('./addTwo.cpp')
console.log(ourModule.addTwo(2, 3))

有关详细信息,请参阅 NPM 包或 Git 存储库

您可以使用 NACL。它是 chrome 的原生客户端,但它是实验性的。您必须编写C++代码,然后在JS文件中引用它。

https://developer.chrome.com/native-client/overview

相关内容

  • 没有找到相关文章

最新更新