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

VS2019嵌入Lua时longjmp崩溃 换C++编译出现LNK2019未解析符号问题

问题核心原因

你遇到的LNK2019错误是符号不匹配导致的:

  • Lua源码默认是C语言实现,加入VS项目后默认按C编译器编译,生成的函数符号是无C++名称修饰的C链接符号
  • 你去掉extern "C"包裹引入Lua头文件后,C代码中的Lua函数声明会生成带C名称修饰的符号,和Lua源码编译出来的C链接符号无法匹配,所以提示符号未解析
  • 另外你只改头文件引用方式是没用的,Lua源码本身如果按C编译,依然会使用longjmp的实现,达不到替换为C++异常的效果

解决方案

按以下步骤操作即可同时解决链接错误和longjmp崩溃的问题:

1. 修改Lua源码的编译模式

  • 在VS解决方案资源管理器中,选中所有加入项目的Lua .c源文件(含lapi.c、lauxlib.c等全部Lua官方源码文件)
  • 右键选择「属性」,先将顶部的配置、平台选项改为你当前使用的版本(也可以选择「所有配置」「所有平台」避免后续切换配置重复修改)
  • 依次展开配置属性 > C/C++ > 高级,找到「编译为」选项,将默认的「编译为 C 代码 (/TC)」修改为「编译为 C++ 代码 (/TP)」,保存设置。

2. 调整预处理器宏

  • 右键项目名称选择「属性」,展开配置属性 > C/C++ > 预处理器
  • 检查「预处理器定义」列表,确认没有LUA_USE_LONGJMP宏定义,如果有就删除该条目,确保Lua编译时会命中C++异常的逻辑分支。

3. 统一头文件引用规则

  • 项目内所有引用Lua头文件的位置,都不要用extern "C"包裹,确保C编译器识别到的Lua函数声明和Lua源码编译生成的C链接符号完全匹配。

验证

完成上述修改后清理并重新生成整个项目,LNK2019错误会消失,同时Lua报错时会抛出C++异常而非执行longjmp,不会再触发进程崩溃问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:36:04