在安装过程中编译caffe文件时出现错误(Makefile.config)

在安装过程中编译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

回答:

  1. 下载CUDAcudnn到您的计算机上。我使用的是cuda 7.5和cudnn 5.0,与最新的Caffe配合使用效果很好。
  2. 将cuda和cudnn分别解压到计算机上的某个位置,例如</path/to/cuda></path/to/cudnn>
  3. 在您的终端中:

    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

  4. Makefile.config中,将这一行

    # CUDA directory contains bin/ and lib/ directories that we need.CUDA_DIR := /usr/local/cuda
    更改为
    CUDA_DIR := </path/to/cuda>

  5. make all -j8 && make pycaffe -j8 && make run -j8 && make runtest -j8

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注