Caffe - Ubuntu 安装及问题解决

  • Ubuntu14.04
  • CUDA 8.0
  • cuDNN

Caffe 安装

  • Step 1 CUDA安装
    要结合使用 Caffe 和 NVIDIA GPU,需要安装CUDA 工具包.

  • Step 2 cuDNN 安装

    • 下载适用于Linux的cuDNN库,这里需要注册加速计算开发人员计划;
    • 下载后,解压缩文件并将其复制到CUDA目录, 以cuDNN v5.1 为例:
tar zvxf  cudnn-8.0-linux-x64-v5.1.tgz 
cd cuda/
sudo cp lib64/lib* /usr/local/cuda/lib64/
sudo cp include/cudnn.h /usr/local/cuda/include/
- 建立软链接,并更新:
cd /usr/local/cuda/lib64/
sudo rm -rf libcudnn.so libcudnn.so.5
sudo ln -s libcudnn.so.5.1.10 libcudnn.so.5
sudo ln -s libcudnn.so.5 libcudnn.so
sudo ldconfig -v

注:cuDNN在很多工程中兼容性较差,可能需要安装特定的历史版本,只需对如上命令中的版本进行修改.
查看caffe 是否成功使用cuDNN v5:

ldd ./build/tools/caffe.bin  | grep cudnn
  • Step 3 安装依赖项
$ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler libgflags-dev libgoogle-glog-dev liblmdb-dev libatlas-base-dev git
$ sudo apt-get install --no-install-recommends libboost-all-dev
$ sudo apt-get install libatlas-base-dev # 安装 ATLAS
$ sudo apt-get install libopenblas-dev # 安装OpenBLAS
$ sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
  • Step 4 安装 Nccl库
    多GPUs进行并行计算,Caffe自带实现. 在多个 GPU 上运行 Caffe 需要使用 NVIDIA Nccl.
$ git clone https://github.com/NVIDIA/nccl.git
$ cd nccl
$ sudo make install -j4
$ sudo ldconfig

Nccl 库和文件头将安装在 /usr/local/lib 和 /usr/local/include 中.
Nccl主要是为了加速在多GPU环境,同时用多块GPU做training的时候,它做出一个同步,或者说Reduction时候,加速collective的过程。
它的最核心思想是什么呢?在做数据传输的时候,把大块数据切成小块,同时利用系统里面的多条链路,比如现在是PCI-E链路,同时利用PCI-E的上行和下行,尽量去避免不同的数据同时用某一个上行或者下行通道,可能会造成数据的contention,大大降低传输效率。

  • Step 5 编译Caffe
    • 下载Caffe
$ git clone https://github.com/BVLC/caffe.git
$ cd caffe/
$ cp Makefile.config.example Makefile.config
- 编辑 Makefile.config,进行修改:
取消 USE_CUDNN := 1 的注释,启用 cuDNN 加速; 取消 USE_Nccl := 1 的注释,启用在多个 GPU 上运行 Caffe 所需的 Nccl
- 编译安装Caffe
$ make all -j8
$ make test -j8
$ make pycaffe  # python API 
$ make matcaffe # matlab API,需定义matlab路径

完成安装,即可在 build/tools/caffe 中获得 Caffe 二进制文件.

查看 Caffe 库版本信息

ldd build/tools/caffe # 查看所有的库
ldd build/tools/caffe | grep cudnn # 查看cudnn 版本信息
ldd build/tools/caffe | grep openblas # 查看 openblas 库信息

Caffe 实例

  • Step1 - 准备图像数据库
    测试 Caffe 的训练性能需要使用图像数据库作为输入资源。Caffe 自带多个模型,可使用来自 ILSVRC12 挑战赛(“ImageNet”)的图像.
    原始图像文件可从 http://image-net.org/download-images 下载(您将需要开通帐户并同意其条款.
    下载原始图像文件并解压,假设原始图像存储方式如下:
/path/to/imagenet/train/n01440764/n01440764_10026.JPEG
/path/to/imagenet/val/ILSVRC2012_val_00000001.JPEG
  • Step2 - 下载辅助数据
$ ./data/ilsvrc12/get_ilsvrc_aux.sh
  • Step3 - 创建数据库
#更改 examples/imagenet/create_imagenet.sh 脚本中的 TRAIN_DATA_ROOT 和 VAL_DATA_ROOT 为解压后的原始图像路径
# 设置 RESIZE=true 以便在将图像添加到数据库之前将其调整到适当大小

# 创建图像数据库
$ ./examples/imagenet/create_imagenet.sh

# 创建所需的图像均值文件
$ ./examples/imagenet/make_imagenet_mean.sh
  • Step4 - 训练模型
$ export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/lib:$LD_LIBRARY_PATH

# 编辑 models/bvlc_AlexNet/solver.prototxt 文件
$ ./build/tools/caffe train –solver=models/bvlc_AlexNet/solver.prototxt –gpu 0

# 可以通过指定多个设备 ID(例如 0、1、2、3)或指定“-gpu all”以使用系统中所有可用的 GPU,在多个 GPU 上进行训练. 

安装问题及解决

问题1 - python 相关项安装

$ sudo apt-get install python-numpy python-scipy python-matplotlib python-sklearn python-skimage python-h5py python-protobuf python-leveldb python-networkx python-nose python-pandas python-gflags Cython ipython 
$ sudo apt-get install python-pip wget

问题2 - No module named lmdb

$ sudo apt-get install liblmdb-dev
或
$ sudo pip install lmdb

问题3 - No module named cv2

$ sudo conda install opencv # for Anaconda 
或
$ sudo apt-get install python-opencv

问题4 - can not find module skimage.io

$ sudo apt-get install python-skimage 
$ sudo apt-get update
$ make pycaffe # 重新编译 python API

问题5 - No module named _caffe

# 设置环境变量
$ sudo  gedit /etc/profile
# 添加环境变量:
    export PYTHONPATH=${HOME}/caffe-master/distribute/python:$PYTHONPATH
    export LD_LIBRARY_PATH=${HOME}/caffe-master/build/lib:$LD_LIBRARY_PATH
$ source /etc/profile # 使环境变量生效
$ echo $<环境变量名> # 查看环境变量

问题6 - make pytest时,出现layer_factory.hpp:77 ] Check Failed: registry…..

(详细错误信息类似于:Check Failed: registry.count(type) == 1 (0 vs. 1) UnkNown layer type: Python)

打开caffe目录下的Makefile.config文件,找到WITH_PYTHON_LAYER  := 1这一行,将前面的‘#’去掉,重新编译,最好是重新打开一个终端进行编译

问题7 - No module named easydict

$ sudo pip install easydict

问题8 - ImportError: No module named google.protobuf错误

$ wget  https://code.google.com/p/protobuf/wiki/Download?tm=2
$ 解压缩文件,并进入文件夹
$ ./configure
$ make
$ make check
$ make install
$ ./configure && make && cd python && python setup.py test && python setup.py install

引用1:http://code.google.com/p/protobuf/issues/detail?id=235
引用2:http://www.jb51.cc/article/p-rdngwpwe-nz.html

问题9 - ImportError: No module named google.protobuf.internal

$ sudo apt-get install python-protobuf
或
使用新立得软件包搜索“python-protobuf”安装

问题10 - “Fatal error: hdf5.h: 没有那个文件或目录”

- Step 1: 在Makefile.config文件的第85行,添加/usr/include/hdf5/serial/ 到 INCLUDE_Dirs,也就是把下面第一行代码改为第二行代码:
INCLUDE_Dirs := $(PYTHON_INCLUDE) /usr/local/include
INCLUDE_Dirs := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
- Step 2: 在Makefile文件的第173行,把 hdf5_hl 和hdf5修改为hdf5_serial_hl 和 hdf5_serial,也就是把下面第一行代码改为第二行代码:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial

问题11 - nccl.hpp:5:18: Fatal error: nccl.h: No such file or directory

# 在多个 GPU 上运行 Caffe 需要使用 NVIDIA Nccl
$ git clone https://github.com/NVIDIA/nccl.git
$ cd nccl
$ sudo make install -j4
# Nccl 库和文件头将安装在 /usr/local/lib 和 /usr/local/include 中
$ sudo  ldconfig # 该命令不执行会出现错误: error while loading shared libraries: libnccl.so.1: cannot open shared object file: No such file or directory 

问题12 - No module named google.prototxt

$ sudo apt-get install python-protobuf
或   
可以先下载安装包,自行编译和安装。可参考:http://blog.csdn.net/paynetiger/article/details/8197326
建议使用第一种方法,下面是关键:
如果使用Anaconda,而以上两种方法无论哪一种都会将prototxt相关文件安装到/usr/local/lib/python2.7/dist-packages, 需要将相关文件复制到Anaconda/lib/python2.7/site-packages下,才能正常使用.

问题13 - No module named pydot

$ sudo apt-get install graphviz # 安装graphviz
$ sudo pip install pydot # 安装pydot
如果使用Anaconda,需要将相关文件从/usr/local/lib/python2.7/dist-packages复制到Anaconda/lib/python2.7/site-packages下.

问题14 - ImportError: libcudart.so.7.0: cannot open shared object file: No such file or directory (CUDA7.5)

$ sudo ldconfig /usr/local/cuda/lib64
$ sudo ldconfig /usr/local/cuda-7.5/lib64

问题15 - Failed to compile cuda_ndarray.cu: libcublas.so.7.5: cannot open shared object file(CUDA7.5)

$ sudo ldconfig /usr/local/cuda-7.5/lib64

问题16 - ImportError: No module named caffe

import sys
sys.path.append("/(你的caffe-master路径)/caffe-master/python")
sys.path.append("/(你的caffe-master路径)/caffe-master/python/caffe")
import caffe

问题17 - ImportError: No module named google.protobuf.internal

# 下载protobuf-2.3.0$ wget http://protobuf.googlecode.com/files/protobuf-2.5.0.zip
$ unzip protobuf-2.5.0
$ cd protobuf-2.5.0
$ chmod 777 configure
$ ./configure
$ make -j4
$ make check -j4
$ make install    

# 编译python接口   
$ cd ./python 
$ python setup.py build 
$ python setup.py test 
$ python setup.py install
$ protoc -version  # 验证使用命令 

>> import google.protobuf

问题18 - autoreconf:not found

$ sudo apt-get install automake autoconf libtool

问题19 - ImportError–usr-lib-liblapack.so.3- undefined symbol- ATL_chemv

# This issue arises when you have libopenblas-base and libatlas3-base installed,but don't haveliblapack3 installed. This combination of packages installs conflicting versions of libblas.so (from OpenBLAS) and liblapack.so (from ATLAS).

# Solution 1 (my favorite): You can keep both OpenBLAS and ATLAS on your machine if you also install liblapack3.
$ sudo apt-get install liblapack3

# Solution 2: Uninstall ATLAS (this will actually install liblapack3 for you automatically because of some deb package shenanigans)
$ sudo apt-get uninstall libatlas3-base

# Solution 3: Uninstall OpenBLAS
$ sudo apt-get uninstall libopenblas-base
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
# Bad configuration
$ dpkg -l | grep 'openblas\|atlas\|lapack'
ii  libatlas3-base                                        3.10.1-4                                            amd64        Automatically Tuned Linear Algebra Software,generic shared
ii  libopenblas-base                                      0.2.8-6ubuntu1                                      amd64        Optimized BLAS (linear algebra) library based on GotoBLAS2
$ update-alternatives --get-selections | grep 'blas\|lapack'
libblas.so.3                   auto     /usr/lib/openblas-base/libblas.so.3
liblapack.so.3                 auto     /usr/lib/atlas-base/atlas/liblapack.so.3
$ python -c 'import numpy'
Traceback (most recent call last):
  File "<string>",line 1,in <module>
  File "/usr/lib/python2.7/dist-packages/numpy/__init__.py",line 153,in <module>
    from . import add_newdocs
  File "/usr/lib/python2.7/dist-packages/numpy/add_newdocs.py",line 13,in <module>
    from numpy.lib import add_newdoc
  File "/usr/lib/python2.7/dist-packages/numpy/lib/__init__.py",line 18,in <module>
    from .polynomial import *
  File "/usr/lib/python2.7/dist-packages/numpy/lib/polynomial.py",line 19,in <module>
    from numpy.linalg import eigvals,lstsq,inv
  File "/usr/lib/python2.7/dist-packages/numpy/linalg/__init__.py",line 50,in <module>
    from .linalg import *
  File "/usr/lib/python2.7/dist-packages/numpy/linalg/linalg.py",line 29,in <module>
    from numpy.linalg import lapack_lite,_umath_linalg
ImportError: /usr/lib/liblapack.so.3: undefined symbol: ATL_chemv

# Solution 1
$ dpkg -l | grep 'openblas\|atlas\|lapack'
ii  libatlas3-base                                        3.10.1-4                                            amd64        Automatically Tuned Linear Algebra Software,generic shared
ii  liblapack3                                            3.5.0-2ubuntu1                                      amd64        Library of linear algebra routines 3 - shared version
ii  libopenblas-base                                      0.2.8-6ubuntu1                                      amd64        Optimized BLAS (linear algebra) library based on GotoBLAS2
$ update-alternatives --get-selections | grep 'blas\|lapack'
libblas.so.3                   auto     /usr/lib/openblas-base/libblas.so.3
liblapack.so.3                 auto     /usr/lib/lapack/liblapack.so.3
$ python -c 'import numpy'

# Solution 2
$ dpkg -l | grep 'openblas\|atlas\|lapack'
ii  liblapack3                                            3.5.0-2ubuntu1                                      amd64        Library of linear algebra routines 3 - shared version
ii  libopenblas-base                                      0.2.8-6ubuntu1                                      amd64        Optimized BLAS (linear algebra) library based on GotoBLAS2
$ update-alternatives --get-selections | grep 'blas\|lapack'
libblas.so.3                   auto     /usr/lib/openblas-base/libblas.so.3
liblapack.so.3                 auto     /usr/lib/lapack/liblapack.so.3
$ python -c 'import numpy'

# Solution 3
$ dpkg -l | grep 'openblas\|atlas\|lapack'
ii  libatlas3-base                                        3.10.1-4                                            amd64        Automatically Tuned Linear Algebra Software,generic shared
$ update-alternatives --get-selections | grep 'blas\|lapack'
libblas.so.3                   auto     /usr/lib/atlas-base/atlas/libblas.so.3
liblapack.so.3                 auto     /usr/lib/atlas-base/atlas/liblapack.so.3
$ python -c 'import numpy'

问题20 - libcudart.so.7.5 cannot open shared object file: No such file or directory(CUDA7.5)

# 检查环境变量设置 
$ echo $PATH
$ echo $LD_LIBRARY_PATH 
# 将一些文件复制到/usr/local/lib文件夹下:
$ sudo cp /usr/local/cuda-7.5/lib64/libcudart.so.7.5 /usr/local/lib/libcudart.so.7.5 && sudo ldconfig
$ sudo cp /usr/local/cuda-7.5/lib64/libcublas.so.7.5 /usr/local/lib/libcublas.so.7.5 && sudo ldconfig
$ sudo cp /usr/local/cuda-7.5/lib64/libcurand.so.7.5 /usr/local/lib/libcurand.so.7.5 && sudo ldconfig

问题21 - W- GPG error- http–archive-ubuntukylin-com

$ sudo apt-get update
# 出现错误 - W: GPG error: http://archive.ubuntukylin.com:10006 xenial InRelease: The following signatures Couldn't be verified because the public key is not available: NO_PUBKEY 8D5A09DC9B929006
# 是密钥的问题,解决办法:
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8D5A09DC9B929006
# 注意提示的密钥和你上述命令中的密钥是一样的,每个人的电脑都不一样

问题22 - ImportError-No module named yaml

$ sudo apt-get install python-yaml
或源码安装,如 PyYAML 3.11$ wget http://pyyaml.org/download/pyyaml/PyYAML-3.11.tar.gz 
$ tar -zxvf PyYAML-3.11.tar.gz  
$ python setup.py install

问题23 - ubuntu常见错误–Could not get lock

# 通过终端安装程序sudo apt-get install xxx时出错:
# E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
# E: Unable to lock the administration directory (/var/lib/dpkg/),is another process using it
# 出现这个问题可能是有另外一个程序正在运行,导致资源被锁不可用。而导致资源被锁的原因可能是上次运行安装或更新时没有正常完成,进而出现此状况,解决的办法:
$ sudo rm /var/cache/apt/archives/lock
$ sudo rm /var/lib/dpkg/lock

问题24 - ubuntu服务器的NVIDIA驱动自动更新所引起的问题及解决方法

# 问题描述:
# 服务器为Ubuntu14.04,NVIDIA驱动由352.39自动升级到352.63,导致显卡不能使用,错误为:运行nvidia-smi指令,得到的信息为“Failed to initialize NVML: GPU access blocked by the operating sestem”
# 系统:Ubuntu14.04
# cuda:7.5

# 解决方案:
# 1. 首先关闭系统包括的所有更新
$ sudo vim /etc/apt/apt.conf.d/50unattended-upgrades
#(注释掉其中的更新部分)
#参考链接:http://www.linuxdiyf.com/Linux/15997.html

# 2. 卸载cuda驱动并重新安装
# (1)彻底卸载
$ sudo apt-get remove --purge nvidia*
$ sudo apt-get autoremove
$ sudo apt-get clean
$ dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P 
# 参考链接:
# https://devtalk.nvidia.com/default/topic/900899/cuda-setup-and-installation/unable-to-detect-cuda-capable-device-after-automatic-forced-nvidia-updated/
# http://zhidao.baidu.com/link?url=smwXar3NPdAi1WxnZJ2_sARCEPoNcxLwB0RwmEnDPiqyrbdz64aVCoabN9azod-AQrJP0OjeiL8-y8mFRHZDma

# (2)重装cuda
# 由于之前系统Ubuntu14.04在配置好caffe环境后,编译matlab接口时将gcc由4.8降级为4.7。若直接安装cuda,会提示错误,“Unable to find the kernel source tree for the currently running kernel. Please make sure you have installed the kernel source files for your kernel and that they are properly configured; on Red Hat Linux systems,for example,be sure you have the 'kernel-source' or 'kernel-devel' RPM installed.If you kNow the correct kernel source files are installed,you may specify the kernel source path with the '--kernel-source-path' command line option.”.如果按照此条路径思索,在尝试添加了“--kernel-source-path”之后,仍存在问题。继续往下走,会提示给系统内核降级。
# 考虑到之前曾对系统的gcc降级,这导致了上述错误,对gcc升级。
$ sudo apt-get install gcc-4.7
$ cd /usr/bin
$ sudo mv gcc gcc.bak
$ sudo ln -s gcc-4.7 gcc
$ sudo mv g++ g++.bak
$ sudo ln -s g++-4.7 g++
# 参考链接:http://www.mamicode.com/info-detail-876185.html

# 然后按照常规方法重装cuda驱动即可解决问题。

# 转自: http://blog.csdn.net/u012494820/article/details/52289095

问题25 - 装nvidia驱动后无法进入系统

# 开机,在 GRUB 选择界面按 E,这时界面变成了一个编辑器。
# 在倒数几行找到 ro quiet splash
# 然后删掉quiet,改成text,接着按F10
# 这时你已进入操作系统(ctrl+alt+F1-F6),输入用户名密码登录。
# 然后输入以下代码:
$ sudo add-apt-repository ppa:bumblebee/stable
$ sudo apt-get update
$ sudo apt-get install bumblebee bumblebee-nvidia

问题26 - opencv3.1 安装

# 从官网(http://opencv.org/downloads.html)下载OpenCV,并将其解压到安装的位置,假设解压到了/home/opencv

# 创建编译文件夹:
$ cd ~/opencv
$ mkdir build
$ cd build

# 配置:
$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. 

# 编译:
make -j8 #-j8表示并行计算,也可直接 make  

# opencv安装
$ sudo make install

问题27 - “libcudart.so.8.0 cannot open shared object file: No such file or directory”

# 解决办法是将一些文件复制到/usr/local/lib文件夹下:
# 注意CUDA版本号
$ sudo cp /usr/local/cuda-8.0/lib64/libcudart.so.8.0 /usr/local/lib/libcudart.so.8.0 && sudo ldconfig
$ sudo cp /usr/local/cuda-8.0/lib64/libcublas.so.8.0 /usr/local/lib/libcublas.so.8.0 && sudo ldconfig
$ sudo cp /usr/local/cuda-8.0/lib64/libcurand.so.8.0 /usr/local/lib/libcurand.so.8.0 && sudo ldconfig

问题28 - matio.h no such file or directory / matio 安装

$ sudo apt-get install libmatio-dev
或源码安装:  
# 下载 matio (https://sourceforge.net/projects/matio/)
$ tar zxf matio-X.Y.Z.tar.gz
$ cd matio-X.Y.Z
$ ./configure
$ make
$ make check
$ make install  # 安装
$ export LD_LIBRARY_PATH=/path/to/libmatio.so.2

# 在caffe 的 Makefile.config 中的INCLUDE_Dirs 中添加 matio 的 src路径, LIBRARY_Dirs 中添加 src/.libs,如:
# INCLUDE_Dirs := $(PYTHON_INCLUDE) /usr/local/include /path/to/matio-1.5.2/src
# LIBRARY_Dirs := $(PYTHON_LIB) /usr/local/lib /usr/lib /path/to/matio-1.5.2/src/.libs

# 参考: http://blog.csdn.net/houqiqi/article/details/46469981

问题29 - fast-rcnn 出现问题

# cython_bBox 和cython_nms 问题
$ cd fast_rcnn_root/lib
$ python setup.py install

# setup.py安装完成后,
$ cd python_root/Lib/site-packages/utils
# 可以找到两个文件cython_bBox.so和cython_nms.so,把这两个文件复制到fast_rcnn_root/lib/utils中即可.
# 参考: http://blog.csdn.net/happynear/article/details/46822109

问题30 - CUDA8.0- atomicAdd的重写问题,cuda8中出现了atomicAdd的定义,从而产生bug

将common.cuh 进行如下修改,注意最后的endif

  1. #ifndef CAFFE_COMMON_CUH_ 
  2. #define CAFFE_COMMON_CUH_ 
  3.   
  4.   
  5. #include <cuda.h> 
  6. #if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ >= 600 
  7. #else 
  8. // CUDA: atomicAdd is not defined for doubles 
  9. static __inline__ __device__ double atomicAdd(double *address,double val) {  
  10.   unsigned long long int* address_as_ull = (unsigned long long int*)address;  
  11.   unsigned long long int old = *address_as_ull,assumed;  
  12.   if (val==0.0)  
  13.     return __longlong_as_double(old);  
  14.   do {  
  15.     assumed = old;  
  16.     old = atomicCAS(address_as_ull,assumed,__double_as_longlong(val +__longlong_as_double(assumed)));  
  17.   } while (assumed != old);  
  18.   return __longlong_as_double(old);  
  19. }  
  20. #endif 
  21. #endif 

  至此基本就可以make通过了.

问题31 - CUDA 查询 nvcc -V not installed 问题

问题:

$ nvcc -V
>> The program 'nvcc' is currently not installed. You can install it by typing:
sudo apt-get install nvidia-cuda-toolkit

但已经安装了cuda,在 /usr/local 能够看到文件夹 cuda-XX. 这需要如下设置:

$ sudo gedit ~/.bashrc
在最后面,64位的话粘贴以下内容:
export PATH=/usr/local/cuda-7.5/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH

$ source ~/.bashrc 
使其立即生效即可

问题32 - 使用C++ 11特性的编译问题

问题:

有时在编写caffe代码时为了简便可能会使用C++98之后的一些新特性,如果不对caffe的默认编译选项进行修改则会产生诸如“xxx is not a member of ‘std’”或者某些函数没有匹配声明的错误.

解决方案:

在Makefile中的g++编译命令里添加-std=c++11的flag.
caffe 的 Makefile 中,

CXXXFLAGS += -pthread -fPIC $(COMMON_FLAGS) $(WRANINGS)

之后添加 -std=c++11

From 在caffe中使用C++ 11特性的编译问题

问题33 - 编译时出现undefined reference错误

问题:

../lib/libcaffe.so.1.0.0: undefined reference to `caffe::BlockingQueue<boost::shared_ptr<caffe::DataReader::QueuePair> >::size() const'
../lib/libcaffe.so.1.0.0: undefined reference to `caffe::BlockingQueue<boost::shared_ptr<caffe::DataReader::QueuePair> >::push(boost::shared_ptr<caffe::DataReader::QueuePair> const&)'
../lib/libcaffe.so.1.0.0: undefined reference to `caffe::BlockingQueue<caffe::Datum*>::push(caffe::Datum* const&)'
../lib/libcaffe.so.1.0.0: undefined reference to `caffe::BlockingQueue<caffe::Datum*>::BlockingQueue()'
../lib/libcaffe.so.1.0.0: undefined reference to `caffe::BlockingQueue<boost::shared_ptr<caffe::DataReader::QueuePair> >::pop(std::__cxx11::basic_string<char,std::char_traits<char>,std::allocator<char> > const&)'
../lib/libcaffe.so.1.0.0: undefined reference to `caffe::BlockingQueue<caffe::Datum*>::pop(std::__cxx11::basic_string<char,std::allocator<char> > const&)'
../lib/libcaffe.so.1.0.0: undefined reference to `caffe::BlockingQueue<caffe::Datum*>::try_pop(caffe::Datum**)'
../lib/libcaffe.so.1.0.0: undefined reference to `caffe::BlockingQueue<boost::shared_ptr<caffe::DataReader::QueuePair> >::BlockingQueue()'

解决方案:

//在blocking_queue.cpp中添加数据类型的泛型实例化的声明
template class BlockingQueue<Datum*>;
template class BlockingQueue<shared_ptr<DataReader::QueuePair> >;

问题34 - ImportError:No module named caffe

可能是 caffe 库路径问题:

import sys
sys.path.insert(0,caffe_root+'python) import caffe

问题35 - _caffe.so: undefined symbol: _ZN5caffe4mtx_E

Uncomment to support layers written in Python (will link against Python libs)

解决方案:
编辑: Makefile.config

WITH_PYTHON_LAYER := 1

问题36 - 安装 scipy 出现错误: error: library dfftpack has Fortran sources but no Fortran compiler found

错误原因是,没有安装 gfortran 编译器

sudo apt-get install gfortran

Caffe - Ubuntu 安装及问题解决的更多相关文章

  1. ios中的.dylib和.a lib有什么区别?

    我知道Objectivec中的编译和运行时是什么,但是我想知道是什么画了这两个库之间的界限?他们的目的是什么,除了陈述一个是静态的而另一个是动态的?我们何时需要一个而不是另一个?

  2. ios – 如何使用Objective C类中的多个参数调用Swift函数?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  3. ios – Swift 4添加手势:覆盖vs @objc

    我想在我的视图中添加一个手势,如下所示:但是,在Swift4中,我的编译器给出了以下错误:建议添加@objc以将此实例方法公开给Objective-C.实现此目的的另一个选项将覆盖touchesBegan()函数并使用它来处理点击.我试图以“Swift”的方式做到这一点,而不必带入Obj-C.有没有纯粹的Swift方式来添加这个轻击手势而不使用@objc?

  4. ios – 将视频分享到Facebook

    我正在编写一个简单的测试应用程序,用于将视频从iOS上传到Facebook.由于FacebookSDK的所有文档都在Objective-C中,因此我发现很难在线找到有关如何使用Swift执行此操作的示例/教程.到目前为止我有这个在我的UI上放置一个共享按钮,但它看起来已禁用,从我读到的这是因为没有内容设置,但我看不出这是怎么可能的.我的getVideoURL()函数返回一个NSURL,它肯定包含视

  5. ios – 以编程方式在Swift中添加联系人

    我想在Swift中以编程方式添加联系人.我发现了一些Objective-C示例,但我没有让它们工作,甚至在Objective-C中也没有.我不希望这涉及到AddressBookUI,因为我想从我自己的UI中获取值.解决方法这是在Swift中添加联系人的快速方法.我在我的iPhone5iOS7.1上验证了它,因为我发现模拟器并不总是与我的手机对AB的东西相同.您可以添加一个按钮并指向此方法:顺便说一下–它假设你已经分配了一个地址簿var,你可以通过覆盖viewDidAppear来打开视图.它也会执行安全提示

  6. ios – 为目标c中的方法传递未知类型的参数,可能吗?

    是否可以将未知类型的参数传递给objective-C方法?在C#中你可以写实现这一点,但我知道Objective-C没有泛型,所以有没有其他方法可以在Objective-C中实现这一点?我需要这个,因为我想创建一个方法来改变不同对象的文本颜色,如UITextField和UIButton的占位符文本.所以我的计划是创建一个名为textWhite的方法,然后在此方法中检查对象的类型,然后运行匹配的代码以使文本颜色变为白色.解决方法是的,可以传递未知类型的参数.见下面的例子.请参考使用id对象的链接作为参数Us

  7. ios – Swift指针算术和解除引用;将一些类似C的地图代码转换为Swift

    我有一点似乎没有工作的Swift代码……解决方法您正在指定locationPointer指向新位置,但仍在下一行中使用ptr,并且ptr的值尚未更改.将您的最后一行更改为:或者你可以改变指向var的指针并推进它:

  8. xamarin.ios – ShareKit与MonoTouch如何?

    有人可以验证ShareKit实际上是否可用于MonoTouch并指导我完成使其工作所需的步骤?解决方法您首先从getsharekit.com下载还是使用ShareKit2.0?

  9. ios – “禁用模块时使用’@import’”错误 – 启用模块和链接框架= YES

    我有一个使用CocoaPods并使用’SCLAlertView-Objective-C’窗格的项目.该pod使用@importUIKit;模块样式导入.我在目标和项目设置中将“启用模块(C&Objective-C)”和“自动链接框架”设置为YES.当模块被禁用时,我仍然得到“使用’@import’错误.有没有什么可以阻止Xcode能够启用模块,如使用.pch文件,任何链接器标志,或者我没有提到的任

  10. XCode 6.3立即在抛出的Objective-C异常上引发SIGABRT

    考虑以下目标-C代码在XCode6.2中,它按预期工作(记录“错误消息”).但是,由于我们升级到6.3,抛出行(throwstd::logic_error…)引发SIGABRT(堆栈跟踪仅包含_cxa_throw和_pthread_kill,超出applicationdidFinishLaunchingWithOptions)并导致应用程序崩溃.这只发生在我们的应用程序中–当我将完全相同的代码复制

随机推荐

  1. crontab发送一个月份的电子邮件

    ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

  2. 模拟两个ubuntu服务器计算机之间的慢速连接

    我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

  3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

    我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

  4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

    我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

  5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

    &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

  6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

    我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

  7. ubuntu – vagrant无法连接到虚拟框

    当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

  8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

    我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

  9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

    我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

  10. 检查ubuntu上安装的rubygems版本?

    如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

返回
顶部