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

pybind11链接含外部函数调用的动态库出现Undefined Symbol错误如何解决

问题原因

普通C++可执行程序默认会将自身包含的全局、类成员符号导出到进程全局符号表,因此libstu_lib.so运行时可以找到可执行程序中编译的Student::setId实现,运行正常。而pybind11生成的Python扩展模块默认仅导出模块初始化必需的少量符号,其余符号默认隐藏,不会暴露到全局符号表,导致依赖外部符号的libstu_lib.so加载时找不到对应实现,抛出未定义符号错误。

解决方法

无需修改现有动态库源码,仅需在CMake配置中为pybind11扩展模块添加导出符号的配置即可,修改CMakeLists.txt中pybind相关部分如下:

find_package(pybind11 REQUIRED)
pybind11_add_module(stu Student_wrapper.cpp Student.cpp)
# 新增以下配置,让扩展模块导出自身所有符号
set_target_properties(stu PROPERTIES ENABLE_EXPORTS ON)
target_link_libraries(stu PUBLIC stu_lib)

如果Linux环境下上述配置仍未解决问题,可以额外补充链接参数:

set_target_properties(stu PROPERTIES LINK_FLAGS "-Wl,--export-dynamic")

重新编译后导入Python模块即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:27:07