ImportError: /usr/local/lib/libboost_python27.so.1.79.0: undefined symbol: PyClass_Type问题解决过程

当系统中同时存在Python2.7和Python3时,安装libboost_python遇到问题。解决方案包括删除旧版本boost,重新编译安装boost针对Python3.6,创建软链接指向libboost_python3.6.so为libboost_python3.so。详细步骤包括删除相关库,使用指定Python版本编译,最后建立软链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:在运行DAVIS2016数据及官方评估代码时,运行python,显示import xxx.so时遇到错误:

"undefined symbol:  PyString_Type"

出现这个问题的首先原因是电脑内同时存在python2.7python3,所以会遇到问题

打开../stage/lib发现存在的版本为libboost_python27

问题转化为:如何在py2.7与py3的情况下,正确的安装boost,使产生libboost_python3

首先操作是需要卸载boost_python:

sudo rm -rf /usr/local/include/boost
sudo rm -rf /usr/local/lib/libboost*

但是我发现再次重新安装bosst显示失败了,原因:

但是这个这个会删除不完整,还会在系统里面留存boost相关的库,导致你的项目编译的时候总是指向你的本地boost库,还应该删除/usr/local/lib/cmake目录,因为cmake目录里面就是残留的boost库

解决方法:其中第三行删除/usr/local/lib/cmake里的残余,修改为自己下载的版本即可

sudo rm -f /usr/local/lib/libboost*
sudo rm -rf /usr/local/include/boost
sudo rm -rf /usr/local/lib/cmake/*-1.xx.0*

———————————————————————————————————————————

解决方法:python3.6m更改为自己的目录

./bootstrap.sh --with-libraries=python --with-toolset=gcc
./b2 cflags='-fPIC' cxxflags='-fPIC' --with-python include="xxx/anaconda3/include/python3.6m/"
sudo ./b2 install

编译安装成功后,/usr/local/lib下会有libboost_python36.so和libboost_python36.a,有些应用link时需要的是libboost_python3.so或者libboost_python3.a,我们建个软链:

这里需要注意一下,在./bootstrap.sh的时候会有提示检测到python版本,生成的libboost_python文件即该版本,下面软连接的建立需要更换产生的版本

cd /usr/local/lib
sudo ln -s libboost_python-py36.so libboost_python3.so
sudo ln -s libboost_python-py36.a libboost_python3.a

至此,boost完成安装,再进入davis-main文件夹进行cmake,产生tstab.so文件,复制至py文件目录,运行,解决报错

参考连接:boost编译libboost_python3_bodybo的博客-优快云博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值