使用 Clang 和 WebAssembly 导入外部符号

Import External Symbol with Clang and WebAssembly

使用 Clang 将具有 extern 函数声明的 C(++) 代码编译到 WebAssembly 时,它会给出 undefined reference 错误,而不是导入符号。什么选项会让链接器将它们作为导入添加到 WebAssembly 模块而不是尝试解析它们?

#ifdef __cplusplus
    extern "C" {
#endif

extern void externalFunction(void);

#ifdef __cplusplus
    }
#endif

int main() {
    externalFunction();
    return 0;
}

您可以使用 import_module 和 import_name clang 属性将函数标记为已导入。例如:

__attribute__((import_module("env"), import_name("externalFunction"))) void externalFunction(void);

或者您可以将 --allow-undefined 传递给链接器。参见 https://lld.llvm.org/WebAssembly.html#imports