使用 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。
使用 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。