【问题标题】:How to compile longjmp using emcc?如何使用 emcc 编译 longjmp?
【发布时间】:2021-09-01 15:19:32
【问题描述】:

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

#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,并按预期以代码33 退出。但是当使用emcc 编译时,它在链接步骤失败,并出现以下错误:

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 会导致此错误:

wasm-ld: error: symbol exported via --export not found: emscripten_longjmp_jmpbuf

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

我正在使用 Emscripten 版本 2.0.12 运行 Debian stable (bullseye)。


ETA:emcc 报告版本如下:

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

【问题讨论】:

    标签: c webassembly emscripten


    【解决方案1】:

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

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

    $ emcc -v
    emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 2.0.29-git (6e9e10d3f78eb249bf09922a23e19c3f81a86d0f)
    ...
    $ emcc -s LLD_REPORT_UNDEFINED setjmp.c
    

    【讨论】:

    • 嗯。我正在使用标准的 Debian 稳定安装,使用 apt-get install emscripten 安装。如果这是错误的,我需要向 Debian 打包报告一个错误。
    • 使用emsdk 下载一切似乎都很好。所以看来我的问题出在 Debian 软件包上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多