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

SWIG跨模块Python绑定:导入时未定义符号_ZTI4Base问题求助

解决SWIG派生模块导入时的undefined symbol错误

你遇到的ImportError: undefined symbol: _ZTI4Base错误,本质是派生模块_derived_module.so加载时找不到基类Base的RTTI类型信息符号——因为Base类包含虚函数,编译器会生成RTTI相关符号,而当前派生模块的动态库未链接包含这些符号的目标文件或库。

以下是两种可行的解决方法:

方案一:修改Makefile,链接基类依赖

在生成_derived_module.so时,将基类的目标文件或已编译的模块链接进去,让派生模块直接包含所需符号。修改Makefile中的链接命令:

原命令:

${LD} -shared derived_module_wrap.o -o _derived_module.so

改为(链接base.o):

${LD} -shared derived_module_wrap.o base.o -o _derived_module.so

或者(链接已生成的_base_module.so):

${LD} -shared derived_module_wrap.o -L. -lbase_module -o _derived_module.so

方案二:修改测试脚本,调整模块导入顺序

在Python测试脚本中先导入基类模块,让动态加载器提前加载_base_module.so,使基类符号在进程空间中可用:

修改后的test.py:

#!/usr/bin/env python3

import sys
import base_module  # 先导入基类模块
import derived_module

if __name__ == "__main__":
    derived = derived_module.derived()
    res = derived.foo()
    print("res={}".format(res))
    sys.exit()

两种方案的区别:方案一让派生模块独立运行,无需依赖导入顺序;方案二更贴合SWIG多模块设计的预期,利用动态库的符号共享特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:17:16