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_*",因此我重新编译以后也没能成功解决该问题。