【问题标题】:Call C shared library API (in .so lib) from JavaScript从 JavaScript 调用 C 共享库 API(在 .so lib 中)
【发布时间】:2017-07-20 19:20:29
【问题描述】:

我有一个带有一些 API 的自定义 C 共享库 (.so lib)。我想从 AngularJS(或 JS)调用这些 API。我的限制是我不应该使用任何其他编译器重新编译共享库代码,而是直接使用 .so 文件。鉴于这样做的选择有限,我尝试使用一些并计划使用其他一些,但没有一个是令人满意的,即他们需要我的共享库代码用他们自己的编译器重新编译。我的 UI 应用程序是 Chrome 应用程序。

  1. Emscripten 可以工作,但需要使用 emcc 编译器编译我的 .so lib。因此没有用。
  2. 使用 Google PNaCl,它还需要使用自己的 SDK 编译我的 .so 库。
  3. 使用 Node js 并直接使用 node-gyp 从 .so lib 调用 C API。
  4. 使用 js-ctypes 并尝试直接从 JS 代码调用 C API。

我知道前两个对我不起作用。对于第三个和第四个,我不确定它们是否可以在不使用自己的编译器或 SDK 重新编译库代码的情况下工作。 您能否分享一下您的专业知识是否可行或有其他方法可以做吗?

【问题讨论】:

  • Chrome 应用是什么意思? - 这是扩展?
  • Chrome 应用与扩展不同。它与浏览器分离并像桌面应用程序一样在单独的窗口中运行,并且还有其他区别。但我担心的是 C API 调用部分。
  • 我明白了。你看到了吗Important: Chrome will be removing support for Chrome Apps on Windows, Mac, and Linuxdeveloper.chrome.com/apps/contentSecurityPolicy
  • 是的。我已经看到了,但是我的工作是一个实验性的想法,同样的代码库也用于 Web 和移动应用程序,所以我只想测试我的想法,这是我长期以来一直在努力解决的一个问题。

标签: javascript c angularjs node.js jsctypes


【解决方案1】:

使用 node-ffi 库解决了这个问题。我们可以使用 node-ffi 从共享库中调用 C API。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    相关资源
    最近更新 更多