You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用emcc编译含longjmp的C代码并解决链接报错问题

问题解决方法

根本原因

Emscripten 2.0.12版本默认不开启setjmp/longjmp的支持,相关实现不会被默认编译进标准库。手动添加导出符号无效的原因是未开启对应特性时,标准库本身就不存在对应的符号,自然无法导出。

解决方案

编译时添加-s SUPPORT_LONGJMP=1参数即可正常编译,完整编译命令如下:

emcc -s SUPPORT_LONGJMP=1 longjmp.c -o longjmp.js

如果上述命令仍报错,可额外添加-s DISABLE_EXCEPTION_CATCHING=0参数:Debian bullseye源打包的Emscripten默认禁用了异常捕获,会影响该版本基于异常实现的longjmp逻辑。

验证方式

使用Node.js运行生成的js文件后,查看进程退出码即可确认运行正常:

node longjmp.js
echo $?
# 输出为33,和gcc编译的原生程序行为一致

注意事项

不要手动将缺失的longjmp相关符号添加到EXPORTED_FUNCTIONS,这类内部符号会在开启对应特性后自动被链接器引入。


内容的提问来源于stack exchange,提问作者Norman Ramsey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 01:24:04