编译环境 X86 GTX1060 Ubuntu 16.04
git clone https://github.com/BVLC/caffe.git
$cp Makefile.config.example Makefile.config
在Makefile.config中修改如下内容:
94 # Whatever else you find you need goes here.
95 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
96 LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial/
make all
make test
make runtest
make pycaffe 编译python接口
一直到这里和ARM平台编译的方法没有太大差异,通过对比之前讲的ARM平台和X86平台的编译方法,发现区别并不大,不过是多了一些编译配置选项罢了。
而这次我们遇到了如下问题:
Q1 HDF5 library version mismatched error
错误提示:
Warning! ***HDF5 library version mismatched error***
The HDF5 header files used to compile this application do not match
the version used by the HDF5 library to which this application is linked.
Data corruption or segmentation faults may occur if the application continues.
This can happen when an application was compiled by one version of HDF5 but
linked with a different version of static or shared HDF5 library.
You should recompile the application or check your shared library related
settings such as 'LD_LIBRARY_PATH'.
You can, at your own risk, disable this warning by setting the environment
variable 'HDF5_DISABLE_VERSION_CHECK' to a value of '1'.
Setting it to 2 or higher will suppress the warning messages totally.
Headers are 1.10.1, library is 1.8.16
SUMMARY OF THE HDF5 CONFIGURATION
=================================
General Information:
-------------------
HDF5 Version: 1.8.16
从上面的错误提示分析可知,编译和链接的时候用到的hdf5不是一个版本,其中一个版本是1.10.1,另外一个版本是1.8.16。
定位hdf5这个库都哪里有:
locate hdf5*
可知:
/usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5.settings
查看该文件可知,HDF5 Version: 1.8.16
而在caffe中,我们的hdf5的编译路径是:
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5
所以说,我们在编译链接的时候,使用的是1.8.16的版本
再去看看那个1.10.1的版本,
(py3.6) user@starlitsky2010/opt//ssd-caffe$ ls -l /usr/lib/x86_64-linux-gnu/libhdf5_serial_hl.so.10
lrwxrwxrwx 1 root root 27 4月 6 2016 /usr/lib/x86_64-linux-gnu/libhdf5_serial_hl.so.10 -> libhdf5_serial_hl.so.10.0.2
(py3.6) user@starlitsky2010:/opt//ssd-caffe$ ls -l /usr/lib/x86_64-linux-gnu/libhdf5_serial_hl.so.10.0.2
-rw-r--r-- 1 root root 126232 4月 6 2016 /usr/lib/x86_64-linux-gnu/libhdf5_serial_hl.so.10.0.2
上面这个错误告诉我们,在配置hdf5的环境变量时,要保证编译和链接以及执行时的库的一致性。
Q2 AttributeError: ‘module’ object has no attribute ‘open’
/opt/caffe/ 假设该路径为caffe源码路径
/opt/caffe/python/caffe/ 这里我们将这个路径添加到PYTHON_PATH中,这是一个错误的做法
/opt/caffe/python/ 这个是正确的设置路径
也就是如果在配置PYTHONPATH时,多加了一个caffe,就会在在source activate py3.6 更新anaconda环境时报错:
Traceback (most recent call last):
File "/home/starlitsky2010/anaconda2/bin/conda", line 7, in <module>
from conda.cli import main
File "/home/starlitsky2010/anaconda2/lib/python2.7/site-packages/conda/__init__.py", line 10, in <module>
from .common.compat import iteritems, text_type
File "/home/starlitsky2010/anaconda2/lib/python2.7/site-packages/conda/common/compat.py", line 113, in <module>
from io import open as io_open # NOQA
File "/opt/caffe/python/caffe/io.py", line 1, in <module>
import numpy as np
File "/home/starlitsky2010/anaconda2/lib/python2.7/site-packages/numpy/__init__.py", line 142, in <module>
from . import add_newdocs
File "/home/starlitsky2010/anaconda2/lib/python2.7/site-packages/numpy/add_newdocs.py", line 13, in <module>
from numpy.lib import add_newdoc
File "/home/starlitsky2010/anaconda2/lib/python2.7/site-packages/numpy/lib/__init__.py", line 23, in <module>
from .npyio import *
File "/home/starlitsky2010/anaconda2/lib/python2.7/site-packages/numpy/lib/npyio.py", line 14, in <module>
from ._datasource import DataSource
File "/home/starlitsky2010/anaconda2/lib/python2.7/site-packages/numpy/lib/_datasource.py", line 220, in <module>
_file_openers = _FileOpeners()
File "/home/starlitsky2010/anaconda2/lib/python2.7/site-packages/numpy/lib/_datasource.py", line 162, in __init__
self._file_openers = {None: io.open}
AttributeError: 'module' object has no attribute 'open'