问题描述:在运行DAVIS2016数据及官方评估代码时,运行python,显示import xxx.so时遇到错误:
"undefined symbol: PyString_Type"
出现这个问题的首先原因是电脑内同时存在python2.7与python3,所以会遇到问题
打开../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文件目录,运行,解决报错