C++使用Boost Python模块编译报undefined reference to `_Py_Dealloc`求助
问题原因
你遇到的所有未定义引用报错都来自Python C API的核心符号,本质是链接阶段没有链接Python 3.8对应的标准库,boost.python本身依赖Python的核心库,只链接boost_python38是不够的。
解决步骤
1. 确认Python库文件存在
先执行以下命令验证系统中Python 3.8的动态库是否存在:
ls /usr/lib/x86_64-linux-gnu/libpython3.8.so
如果输出正常说明库文件存在,直接进行下一步。如果找不到,可以先安装Python 3.8的开发包:
sudo apt install python3.8-dev
2. 修改链接参数
在原有的链接参数末尾添加-lpython3.8即可,完整的链接命令参考:
g++ -L/usr/lib/x86_64-linux-gnu/ -o bin/Debug/PyOPI obj/Debug/bark.o obj/Debug/main.o -lboost_program_options -lboost_system -lboost_python38 -lpython3.8
3. Code::Blocks可视化配置方法
如果不想手动改编译命令,可以直接在IDE中配置:
- 打开对应项目,点击菜单栏
Project -> Build options - 选择你当前使用的构建配置(Debug/Release或者全局项目配置)
- 切换到
Linker settings标签页 - 在
Link libraries列表中添加python3.8,也可以直接选择完整路径/usr/lib/x86_64-linux-gnu/libpython3.8.so - 保存配置后重新构建项目即可
额外注意事项
你当前的编译参数里同时包含了自己下载的Boost 1.77.0的头文件路径,和系统apt安装的Boost库链接路径,要注意两者版本匹配问题:如果头文件版本和链接的boost_python库版本不一致,也可能引发其他兼容性报错,建议统一使用同一套Boost版本。
内容的提问来源于stack exchange,提问作者Roberto
相关产品推荐
相关产品推荐

