gpt4 book ai didi

node.js - 使用来自 node.js 的 emscripten 编译的 C 库

转载 作者:搜寻专家 更新时间:2023-10-31 22:36:50 25 4
gpt4 key购买 nike

按照 emscripten wiki 上的说明进行操作后我设法编译了一个小型 C 库。这导致了 a.out.js 文件。

我假设使用这个库中的函数(在 node.js 中)像这样的东西会起作用:

var lib = require("./a.out.js");
lib.myFunction('test');

但是这失败了。谁能帮助我或指出一些与此相关的基本教程?

最佳答案

其实所有的功能都已经导出了。生成的 JavaScript 包含以下几行:

var ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function';
// …

if (ENVIRONMENT_IS_NODE) {
// …
module['exports'] = Module;
}

如果您的 C 代码中有一个名为 my_fun 的函数,那么您将定义 Module._my_fun

不过,这种方法存在一些问题。

优化器可能会删除或重命名某些函数,因此请始终通过 -s EXPORTED_FUNCTIONS="['_main','_fun_one','_fun_two']" 指定它们。 C++ 中的函数签名有些困惑,因此明智的做法是 extern "C"{ … } 您要导出的函数。

此外,这种直接的方法requires JS to C type conversions .您可能希望通过在附加 --pre-js 选项的文件中添加另一个 API 层来隐藏它:

var Module = {
my_fun: function(some_arg) {
javascript to c conversion goes here;
Module._my_fun(converted_arg) // or with Module.ccall
}
}

Module 对象稍后会被所有 Emscripten 生成的好东西增强,所以不要担心它是在这里定义的,没有被修改。

最后,您肯定会考虑Embind这是一种公开 Emscripten 提供的漂亮 JavaScript API 的机制。 (需要禁用最新的 fastcomp 后端。)

关于node.js - 使用来自 node.js 的 emscripten 编译的 C 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9020050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com