在安装过程中编译caffe时遇到这些错误,有人能帮我吗?
这是我修改过的caffe文件的Makefile.config
## 参考 http://caffe.berkeleyvision.org/installation.html# 欢迎简化和改进我们的构建系统的贡献!# cuDNN加速开关(取消注释以使用cuDNN构建)。USE_CUDNN := 1# 只使用CPU的开关(取消注释以不支持GPU构建)。# CPU_ONLY := 1# 取消注释以禁用IO依赖和相应的数据层# USE_OPENCV := 0# USE_LEVELDB := 0# USE_LMDB := 0# 取消注释以在读取LMDB文件时允许MDB_NOLOCK(仅在必要时)# 如果您可能会同时读取和写入LMDBs,您不应该设置此标志# ALLOW_LMDB_NOLOCK := 1# 如果您使用的是OpenCV 3,请取消注释# OPENCV_VERSION := 3# 要自定义您的编译器选择,请取消注释并设置以下内容。# 注意,Linux的默认值为g++,OSX的默认值为clang++# CUSTOM_CXX := g++# CUDA目录包含我们需要的bin/和lib/目录。CUDA_DIR := /usr/local/cuda# 在Ubuntu 14.04上,如果通过# "sudo apt-get install nvidia-cuda-toolkit" 安装cuda工具,则使用以下内容:# CUDA_DIR := /usr# CUDA架构设置:我们选择全部。# 对于CUDA < 6.0,为了兼容性,请注释掉*_50行。CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \ -gencode arch=compute_20,code=sm_21 \ -gencode arch=compute_30,code=sm_30 \ -gencode arch=compute_35,code=sm_35 \ -gencode arch=compute_50,code=sm_50 \ -gencode arch=compute_50,code=compute_50# BLAS选择:# atlas为ATLAS(默认)# mkl为MKL# open为OpenBlasBLAS := ATLAS# 自定义(MKL/ATLAS/OpenBLAS)包含和库目录。# 保持注释以接受您选择的BLAS的默认值# (这应该可以工作)!# BLAS_INCLUDE := /path/to/your/blas# BLAS_LIB := /path/to/your/blas# Homebrew将openblas放在一个不在标准搜索路径中的目录中# BLAS_INCLUDE := $(shell brew --prefix openblas)/include# BLAS_LIB := $(shell brew --prefix openblas)/lib# 这仅在您将编译matlab接口时需要。# MATLAB目录应包含/bin/中的mex二进制文件。# MATLAB_DIR := /usr/local# MATLAB_DIR := /Applications/MATLAB_R2012b.app# 注意:这仅在您将编译python接口时需要。# 我们需要能够找到Python.h和numpy/arrayobject.h。# PYTHON_INCLUDE := /usr/include/python2.7 \ # /usr/lib/python2.7/dist-packages/numpy/core/include# Anaconda Python分发版非常流行。包含路径:# 验证anaconda位置,有时它位于根目录下。ANACONDA_HOME := $(HOME) /home/desmond/anaconda2PYTHON_INCLUDE := $(ANACONDA_HOME) /home/desmond/anaconda2/include \ $(ANACONDA_HOME) /home/desmond/anaconda2/include/python2.7 \ $(ANACONDA_HOME) /home/desmond/anaconda2/lib/python2.7/site-packages/numpy/core/include \# 取消注释以使用Python 3(默认是Python 2)# PYTHON_LIBRARIES := boost_python3 python3.5m# PYTHON_INCLUDE := /usr/include/python3.5m \# /usr/lib/python3.5/dist-packages/numpy/core/include# 我们需要能够找到libpythonX.X.so或.dylib。#PYTHON_LIB := /usr/libPYTHON_LIB := $/home/desmond/anaconda2/lib# Homebrew将numpy安装在非标准路径(仅限keg)# PYTHON_INCLUDE += $(dir $(shell python -c 'import numpy.core; print(numpy.core.__file__)'))/include# PYTHON_LIB += $(shell brew --prefix numpy)/lib# 取消注释以支持用Python编写的层(将链接到Python库)WITH_PYTHON_LAYER := 1# 您发现需要的其他任何东西都放在这里。INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/includeLIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib# 如果Homebrew安装在非标准位置(例如您的家庭目录),并且您使用它来处理一般依赖项# INCLUDE_DIRS += $(shell brew --prefix)/include# LIBRARY_DIRS += $(shell brew --prefix)/lib# 取消注释以使用`pkg-config`指定OpenCV库路径。#(通常不需要 - OpenCV库通常安装在上述$LIBRARY_DIRS之一中。)# USE_PKG_CONFIG := 1# 注意,构建和分发目录在`make clean`时都会被清除BUILD_DIR := buildDISTRIBUTE_DIR := distribute# 取消注释以进行调试。由于https://github.com/BVLC/caffe/issues/171,在OSX上不起作用DEBUG := 1# 用于运行单元测试的GPU的ID,'make runtest'将使用它。TEST_GPUID := 0# 启用漂亮的构建(注释掉以查看完整命令)Q ?= @
然后是相应的编译结果(或错误)(提示:错误表示错误或不对)
@在@的@:~/caffe-master$ make all -j4CXX src/caffe/util/db_leveldb.cppCXX src/caffe/parallel.cppCXX src/caffe/util/db_lmdb.cppCXX src/caffe/util/upgrade_proto.cpp在从./include/caffe/util/device_alternate.hpp:40:0包含的文件中, 从./include/caffe/common.hpp:19, 从./include/caffe/util/db.hpp:6, 从./include/caffe/util/db_leveldb.hpp:10, 从src/caffe/util/db_leveldb.cpp:2:./include/caffe/util/cudnn.hpp: 在函数‘void caffe::cudnn::createPoolingDesc(cudnnPoolingStruct**, caffe::PoolingParameter_PoolMethod, cudnnPoolingMode_t*, int, int, int, int, int, int)’中:./include/caffe/util/cudnn.hpp:136:9: 错误:在此范围内未声明‘CUDNN_PROPAGATE_NAN’ CUDNN_PROPAGATE_NAN, h, w, pad_h, pad_w, stride_h, stride_w)); ^./include/caffe/util/cudnn.hpp:15:28: 注意:在宏‘CUDNN_CHECK’的定义中 cudnnStatus_t status = condition; \ ^./include/caffe/util/cudnn.hpp:136:68: 错误:没有依赖于模板参数的‘cudnnSetPooling2dDescriptor_v4’的参数,因此必须提供‘cudnnSetPooling2dDescriptor_v4’的声明 [-fpermissive] CUDNN_PROPAGATE_NAN, h, w, pad_h, pad_w, stride_h, stride_w)); ^./include/caffe/util/cudnn.hpp:15:28: 注意:在宏‘CUDNN_CHECK’的定义中 cudnnStatus_t status = condition; \ ^./include/caffe/util/cudnn.hpp:136:68: 注意:(如果您使用‘-fpermissive’,G++将接受您的代码,但允许使用未声明的名称已被弃用) CUDNN_PROPAGATE_NAN, h, w, pad_h, pad_w, stride_h, stride_w)); ^./include/caffe/util/cudnn.hpp:15:28: 注意:在宏‘CUDNN_CHECK’的定义中 cudnnStatus_t status = condition; \ ^./include/caffe/util/cudnn.hpp: 在全局范围内:./include/caffe/util/cudnn.hpp:141:40: 错误:声明为void的变量或字段‘createActivationDescriptor’ inline void createActivationDescriptor(cudnnActivationDescriptor_t* activ_desc, ^./include/caffe/util/cudnn.hpp:141:40: 错误:在此范围内未声明‘cudnnActivationDescriptor_t’./include/caffe/util/cudnn.hpp:141:69: 错误:在此范围内未声明‘activ_desc’ inline void createActivationDescriptor(cudnnActivationDescriptor_t* activ_desc, ^./include/caffe/util/cudnn.hpp:142:27: 错误:在‘mode’之前需要主表达式 cudnnActivationMode_t mode) { ^在从./include/caffe/util/device_alternate.hpp:40:0包含的文件中, 从./include/caffe/common.hpp:19, 从./include/caffe/util/db.hpp:6, 从./include/caffe/util/db_lmdb.hpp:10, 从src/caffe/util/db_lmdb.cpp:2:./include/caffe/util/cudnn.hpp: 在函数‘void caffe::cudnn::createPoolingDesc(cudnnPoolingStruct**, caffe::PoolingParameter_PoolMethod, cudnnPoolingMode_t*, int, int, int, int, int, int)’中:./include/caffe/util/cudnn.hpp:136:9: 错误:在此范围内未声明‘CUDNN_PROPAGATE_NAN’ CUDNN_PROPAGATE_NAN, h, w, pad_h, pad_w, stride_h, stride_w)); ^./include/caffe/util/cudnn.hpp:15:28: 注意:在宏‘CUDNN_CHECK’的定义中 cudnnStatus_t status = condition; \ ^./include/caffe/util/cudnn.hpp:136:68: 错误:没有依赖于模板参数的‘cudnnSetPooling2dDescriptor_v4’的参数,因此必须提供‘cudnnSetPooling2dDescriptor_v4’的声明 [-fpermissive] CUDNN_PROPAGATE_NAN, h, w, pad_h, pad_w, stride_h, stride_w)); ^./include/caffe/util/cudnn.hpp:15:28: 注意:在宏‘CUDNN_CHECK’的定义中 cudnnStatus_t status = condition; \ ^./include/caffe/util/cudnn.hpp:136:68: 注意:(如果您使用‘-fpermissive’,G++将接受您的代码,但允许使用未声明的名称已被弃用) CUDNN_PROPAGATE_NAN, h, w, pad_h, pad_w, stride_h, stride_w)); ^./include/caffe/util/cudnn.hpp:15:28: 注意:在宏‘CUDNN_CHECK’的定义中 cudnnStatus_t status = condition; \ ^./include/caffe/util/cudnn.hpp: 在全局范围内:./include/caffe/util/cudnn.hpp:141:40: 错误:声明为void的变量或字段‘createActivationDescriptor’ inline void createActivationDescriptor(cudnnActivationDescriptor_t* activ_desc, ^./include/caffe/util/cudnn.hpp:141:40: 错误:在此范围内未声明‘cudnnActivationDescriptor_t’./include/caffe/util/cudnn.hpp:141:69: 错误:在此范围内未声明‘activ_desc’ inline void createActivationDescriptor(cudnnActivationDescriptor_t* activ_desc, ^./include/caffe/util/cudnn.hpp:142:27: 错误:在‘mode’之前需要主表达式 cudnnActivationMode_t mode) { ^make: *** [.build_debug/src/caffe/util/db_leveldb.o] 错误 1make: *** 正在等待未完成的任务....make: *** [.build_debug/src/caffe/util/db_lmdb.o] 错误 1在从./include/caffe/util/device_alternate.hpp:40:0包含的文件中, 从./include/caffe/common.hpp:19, 从src/caffe/util/upgrade_proto.cpp:8:./include/caffe/util/cudnn.hpp: 在函数‘void caffe::cudnn::createPoolingDesc(cudnnPoolingStruct**, caffe::PoolingParameter_PoolMethod, cudnnPoolingMode_t*, int, int, int, int, int, int)’中:./include/caffe/util/cudnn.hpp:136:9: 错误:在此范围内未声明‘CUDNN_PROPAGATE_NAN’ CUDNN_PROPAGATE_NAN, h, w, pad_h, pad_w, stride_h, stride_w)); ^./include/caffe/util/cudnn.hpp:15:28: 注意:在宏‘CUDNN_CHECK’的定义中 cudnnStatus_t status = condition; \ ^./include/caffe/util/cudnn.hpp:136:68: 错误:没有依赖于模板参数的‘cudnnSetPooling2dDescriptor_v4’的参数,因此必须提供‘cudnnSetPooling2dDescriptor_v4’的声明 [-fpermissive] CUDNN_PROPAGATE_NAN, h, w, pad_h, pad_w, stride_h, stride_w)); ^./include/caffe/util/cudnn.hpp:15:28: 注意:在宏‘CUDNN_CHECK’的定义中 cudnnStatus_t status = condition; \ ^./include/caffe/util/cudnn.hpp:136:68: 注意:(如果您使用‘-fpermissive’,G++将接受您的代码,但允许使用未声明的名称已被弃用) CUDNN_PROPAGATE_NAN, h, w, pad_h, pad_w, stride_h, stride_w)); ^./include/caffe/util/cudnn.hpp:15:28: 注意:在宏‘CUDNN_CHECK’的定义中 cudnnStatus_t status = condition; \ ^./include/caffe/util/cudnn.hpp: 在全局范围内:./include/caffe/util/cudnn.hpp:141:40: 错误:声明为void的变量或字段‘createActivationDescriptor’ inline void createActivationDescriptor(cudnnActivationDescriptor_t* activ_desc, ^./include/caffe/util/cudnn.hpp:141:40: 错误:在此范围内未声明‘cudnnActivationDescriptor_t’./include/caffe/util/cudnn.hpp:141:69: 错误:在此范围内未声明‘activ_desc’ inline void createActivationDescriptor(cudnnActivationDescriptor_t* activ_desc, ^./include/caffe/util/cudnn.hpp:142:27: 错误:在‘mode’之前需要主表达式 cudnnActivationMode_t mode) { ^make: *** [.build_debug/src/caffe/util/upgrade_proto.o] 错误 1在从./include/caffe/util/device_alternate.hpp:40:0包含的文件中, 从./include/caffe/common.hpp:19, 从./include/caffe/blob.hpp:8, 从./include/caffe/caffe.hpp:7, 从src/caffe/parallel.cpp:12:./include/caffe/util/cudnn.hpp: 在函数‘void caffe::cudnn::createPoolingDesc(cudnnPoolingStruct**, caffe::PoolingParameter_PoolMethod, cudnnPoolingMode_t*, int, int, int, int, int, int)’中:./include/caffe/util/cudnn.hpp:136:9: 错误:在此范围内未声明‘CUDNN_PROPAGATE_NAN’ CUDNN_PROPAGATE_NAN, h, w, pad_h, pad_w, stride_h, stride_w)); ^./include/caffe/util/cudnn.hpp:15:28: 注意:在宏‘CUDNN_CHECK’的定义中 cudnnStatus_t status = condition; \ ^./include/caffe/util/cudnn.hpp:136:68: 错误:没有依赖于模板参数的‘cudnnSetPooling2dDescriptor_v4’的参数,因此必须提供‘cudnnSetPooling2dDescriptor_v4’的声明 [-fpermissive] CUDNN_PROPAGATE_NAN, h, w, pad_h, pad_w, stride_h, stride_w)); ^./include/caffe/util/cudnn.hpp:15:28: 注意:在宏‘CUDNN_CHECK’的定义中 cudnnStatus_t status = condition; \ ^./include/caffe/util/cudnn.hpp:136:68: 注意:(如果您使用‘-fpermissive’,G++将接受您的代码,但允许使用未声明的名称已被弃用) CUDNN_PROPAGATE_NAN, h, w, pad_h, pad_w, stride_h, stride_w)); ^./include/caffe/util/cudnn.hpp:15:28: 注意:在宏‘CUDNN_CHECK’的定义中 cudnnStatus_t status = condition; \ ^./include/caffe/util/cudnn.hpp: 在全局范围内:./include/caffe/util/cudnn.hpp:141:40: 错误:声明为void的变量或字段‘createActivationDescriptor’ inline void createActivationDescriptor(cudnnActivationDescriptor_t* activ_desc, ^./include/caffe/util/cudnn.hpp:141:40: 错误:在此范围内未声明‘cudnnActivationDescriptor_t’./include/caffe/util/cudnn.hpp:141:69: 错误:在此范围内未声明‘activ_desc’ inline void createActivationDescriptor(cudnnActivationDescriptor_t* activ_desc, ^./include/caffe/util/cudnn.hpp:142:27: 错误:在‘mode’之前需要主表达式 cudnnActivationMode_t mode) { ^make: *** [.build_debug/src/caffe/parallel.o] 错误 1
回答:
- 下载CUDA和cudnn到您的计算机上。我使用的是cuda 7.5和cudnn 5.0,与最新的Caffe配合使用效果很好。
- 将cuda和cudnn分别解压到计算机上的某个位置,例如
</path/to/cuda>
和</path/to/cudnn>
。 -
在您的终端中:
sudo cp </path/to/cudnn>/lib64/libcudnn* </path/to/cuda>/lib64
sudo cp </path/to/cudnn>/include/cudnn.h </path/to/cuda>/include
export PATH=</path/to/cuda>/bin:$PATH
export LD_LIBRARY_PATH=</path/to/cuda>/lib64</path/to/cudnn>:$LD_LIBRARY_PATH
source ~/.bashrc
-
在
Makefile.config
中,将这一行# CUDA directory contains bin/ and lib/ directories that we need.CUDA_DIR := /usr/local/cuda
更改为CUDA_DIR := </path/to/cuda>
-
make all -j8 && make pycaffe -j8 && make run -j8 && make runtest -j8