首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用emcc编译longjmp?

如何使用emcc编译longjmp?
EN

Stack Overflow用户
提问于 2021-09-01 15:19:32
回答 1查看 354关注 0票数 2

我正在尝试诊断emcc的链接器问题。我把它归结为以下文件:

代码语言:javascript
复制
#include <setjmp.h>

jmp_buf error;

int main(int argc, char *argv[]) {
  int n = setjmp(error);
  if (n)
    return n;
  longjmp(error, 33);
  return 0;
}

在使用gcc编译时,该文件生成一个a.out,该a.out与预期的代码33一起退出。但是,在用emcc编译时,它在链接步骤中失败,出现以下错误:

代码语言:javascript
复制
nr@homedog ~/s/c [1]> emcc -s LLD_REPORT_UNDEFINED longjmp.c
error: undefined symbol: __invoke_void_$struct___jmp_buf_tag*_i32 (referenced by top-level compiled C/C++ code)
warning: To disable errors for undefined symbols use `-s ERROR_ON_UNDEFINED_SYMBOLS=0`
warning: ___invoke_void_$struct___jmp_buf_tag*_i32 may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
error: undefined symbol: emscripten_longjmp_jmpbuf (referenced by top-level compiled C/C++ code)
warning: _emscripten_longjmp_jmpbuf may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library

将其添加到EXPORTED_FUNCTIONS会导致以下错误:

代码语言:javascript
复制
wasm-ld: error: symbol exported via --export not found: emscripten_longjmp_jmpbuf

我需要做些什么来编译这个文件?

我运行Debian稳定(斗牛)与Emscripten版本2.0.12。

ETA:emcc报告版本如下:

代码语言:javascript
复制
nr@homedog ~/s/c [1]> emcc -v
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 2.0.12
Debian clang version 11.0.1-2
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /usr/bin
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-01 16:08:53

看起来你有一个不匹配的llvm (clang)和emscripten版本。我们建议使用emsdk安装所有正确的依赖项(如何安装它们?)如果不想使用emsdk,则需要在正确的版本中从源代码构建llvm。

您的示例适用于最新版本的emscripten:

代码语言:javascript
复制
$ emcc -v
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 2.0.29-git (6e9e10d3f78eb249bf09922a23e19c3f81a86d0f)
...
$ emcc -s LLD_REPORT_UNDEFINED setjmp.c
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69016537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档