您的位置:首页 > 编程语言 > Python开发

每日积累(20161130-day-8)(caffe-boost python-boost )

2016-12-07 19:42 387 查看
20161130(day8)

编译caffe遇到libboost_python.so 关于各种undefined reference to "PyUnicodeUCS4_*"的问题

编译vtkPython遇到vtkPythonArg.cxx关于各种undefined reference to "PyUnicodeUCS4_*"的问题

第一个,遇到该问题网友提供的解释:由于ubuntu16.04的python默认编译是ucs2,需要重新编译python,

检测python是ucs2还是ucs4得方法

>>>import sys
>>>sys.maxunicode
若输出:
>>>65535(表示ucs2)
若输出:
>>>111141111(表示ucs4)


当时我检测默认python2.7.11,貌似是ucs4,但一直存在该问题,无法通过编译,就重新编译了python源码

进入python源码文件夹

$./configure --enable-unicode=ucs4
$sudo make -j24
$sudo python setup.py install
安装成功后检测确实是ucs4了

但是caffe还是无法编译成功,问题依然是undefined reference to "PyUnicodeUCS4_*"

无奈只好选择用Makefile.config编译,而且成功了

反正是没有遇到类似问题

第二个,同样是开在undefined reference to "PyUnicodeUCS4_*"无法编译成功,期间将ubuntu系统所有pyconfig.h文件中的Py_UNICODE_SIZE 都定义为4,也没成功

几经折腾,依稀记得之前编译caffe搜索该问题,有网友(忘了在哪看到了,以后看到贴链接)说是boost编译与其他库可能不都是64位,有的是按32编译的,当时也没注意。现在想是不是该问题是由于python是按32位编译的,一搜果然有戏,按提示重新编译python,虽然编译前也按提示检测了系统之前的python和boost_python是不是64位,显示也是64位输出的,但我还是重新编译了一遍python

$sudo make -j24
$sudo python setup.py install
重新编译boost_python,进入boost目录,把./boost/python/detail/config.hpp 添加

#define Py_UNICODE_SIZE 4


然后编译boost

$./bootstrap.sh --with-python=/usr/local
$./b2 install -j 24


重新用cmake编译caffe,成功

重新编译vtkpython,成功

总结一下,我认为在解决第一个问题时,网友针对的是undefined symbol “PyUnicodeUCS4_*”问题的解决方法,将python以ucs4编译,而不是undefined reference to "PyUnicodeUCS4_*",因此我重新编译以后也没能成功解决该问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息