如何为 C 库编写自定义 Emscripten 垫片? Emscripten 为某些 C 库(例如 SDL 和 OpenAL)捆绑了 shim,但对于其他库,您将不得不自己动手。

shim 我的意思是,要移植的代码所依赖的 C 库的 JavaScript 替代品。

最佳答案

Emscripten 有一些 documentation on the subject ,尽管在撰写本文时它有些不完整。

首先,您需要在 JavaScript 中编写一个 Emscripten “库”,让我们假设相应的 C 库称为示例:

example.js:

// "use strict";

var LibraryExample = {
    // Internal functions
    $EXAMPLE: {
        internal_func: function () {
        }
    },
    example_initialize: function (arg) {
        EXAMPLE.internal_func()
    }
}

autoAddDeps(LibraryExample, '$EXAMPLE')
mergeInto(LibraryManager.library, LibraryExample)

其次,您必须通过 emcc 的 --js-library 选项将 example.js 文件集成到构建中:
emcc --js-library shims/example.js -o project.js project.bc

现在函数 example_initialize 应该可以用于 Emscripten 生成的 JS 代码,从而替换 C 库依赖项。

关于c - 如何为 C 库编写 Emscripten 垫片,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25800382/

10-12 03:01