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

使用EMCC编译基于IfcOpenShell的C++项目时遇未定义符号问题

解决EMCC编译IfcOpenShell时OpenCascade未定义符号及typeinfo错误

针对你遇到的问题,给出以下具体解决步骤:

1. 修复内联函数未识别问题

OpenCascade的.lxx文件包含内联函数实现,EMCC的编译逻辑与Visual Studio存在差异,需确保内联定义被正确处理:

  • 检查所有引用OpenCascade头文件的代码中,是否正确包含了对应的.lxx文件(通常头文件*.hxx会通过#include "*.lxx"导入内联实现,确认该语句未被条件编译屏蔽)。
  • 添加编译选项-fno-inline(或-fno-inline-small-functions),强制编译器不忽略内联函数的定义,确保符号能被正确解析。
  • 确保编译命令中通过-I参数包含了OpenCascade的.lxx文件所在目录,避免编译器找不到内联实现文件。

2. 解决RTTI相关的typeinfo错误

你遇到的typeinfo for XXX错误是因为EMCC默认关闭了运行时类型信息(RTTI),而OpenCascade依赖RTTI实现多态逻辑:

  • 在编译命令中添加-frtti选项,启用RTTI支持。
  • 若使用-fno-rtti等禁用RTTI的选项,需移除这些设置。

3. 确保编译完整的OpenCascade依赖代码

Visual Studio能编译通过,可能是因为它自动关联了OpenCascade的预编译库或完整源码,而EMCC需要显式指定所有依赖的源码文件:

  • 确认IfcOpenShell依赖的OpenCascade模块对应的.cxx文件已全部加入编译列表,不能仅编译IfcOpenShell自身的cpp文件。
  • 若使用预编译的OpenCascade库,必须确保该库是用EMCC编译生成的WebAssembly版本,Visual Studio编译的Windows库无法直接在EMCC中使用。

4. 调整EMCC链接选项

  • 不要使用ERROR_ON_UNDEFINED_SYMBOLS=0,这会掩盖真实问题,导致后续运行时崩溃。
  • 若临时需要调试,可使用链接选项-Wl,--allow-undefined允许未定义符号,但最终必须解决所有符号缺失问题才能正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 09:16:14