caffe编译相关问题总结

1. 问题一:cudnn版本问题

In file included from ./include/caffe/util/device_alternate.hpp:40:0,
                 from ./include/caffe/common.hpp:19,
                 from src/caffe/util/upgrade_proto.cpp:8:
./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’:
./include/caffe/util/cudnn.hpp:21:10: warning: enumeration value ‘CUDNN_STATUS_RUNTIME_PREREQUISITE_MISSING’ not handled in switch [-Wswitch]
   switch (status) {
          ^
./include/caffe/util/cudnn.hpp: In function ‘void caffe::cudnn::setConvolutionDesc(cudnnConvolutionStruct**, cudnnTensorDescriptor_t, cudnnFilterDescriptor_t, int, int, int, int)’:
./include/caffe/util/cudnn.hpp:113:70: error: too few arguments to function ‘cudnnStatus_t cudnnSetConvolution2dDescriptor(cudnnConvolutionDescriptor_t, int, int, int, int, int, int, cudnnConvolutionMode_t, cudnnDataType_t)’
       pad_h, pad_w, stride_h, stride_w, 1, 1, CUDNN_CROSS_CORRELATION));
                                                                      ^
./include/caffe/util/cudnn.hpp:15:28: note: in definition of macro ‘CUDNN_CHECK’
     cudnnStatus_t status = condition; \
                            ^
In file included from ./include/caffe/util/cudnn.hpp:5:0,
                 from ./include/caffe/util/device_alternate.hpp:40,
                 from ./include/caffe/common.hpp:19,
                 from src/caffe/util/upgrade_proto.cpp:8:
/usr/local/cuda/include/cudnn.h:500:27: note: declared here
 cudnnStatus_t CUDNNWINAPI cudnnSetConvolution2dDescriptor( cudnnConvolutionDescriptor_t convDesc,
                           ^
Makefile:575: recipe for target '.build_release/src/caffe/util/upgrade_proto.o' failed
make: *** [.build_release/src/caffe/util/upgrade_proto.o] Error 1
make: *** 正在等待未完成的任务....
In file included from ./include/caffe/util/device_alternate.hpp:40:0,
                 from ./include/caffe/common.hpp:19,
                 from src/caffe/common.cpp:7:
./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’:
./include/caffe/util/cudnn.hpp:21:10: warning: enumeration value ‘CUDNN_STATUS_RUNTIME_PREREQUISITE_MISSING’ not handled in switch [-Wswitch]
   switch (status) {
          ^
./include/caffe/util/cudnn.hpp: In function ‘void caffe::cudnn::setConvolutionDesc(cudnnConvolutionStruct**, cudnnTensorDescriptor_t, cudnnFilterDescriptor_t, int, int, int, int)’:
./include/caffe/util/cudnn.hpp:113:70: error: too few arguments to function ‘cudnnStatus_t cudnnSetConvolution2dDescriptor(cudnnConvolutionDescriptor_t, int, int, int, int, int, int, cudnnConvolutionMode_t, cudnnDataType_t)’
       pad_h, pad_w, stride_h, stride_w, 1, 1, CUDNN_CROSS_CORRELATION));
                                                                      ^
./include/caffe/util/cudnn.hpp:15:28: note: in definition of macro ‘CUDNN_CHECK’
     cudnnStatus_t status = condition; \
                            ^
In file included from ./include/caffe/util/cudnn.hpp:5:0,
                 from ./include/caffe/util/device_alternate.hpp:40,
                 from ./include/caffe/common.hpp:19,
                 from src/caffe/common.cpp:7:
/usr/local/cuda/include/cudnn.h:500:27: note: declared here
 cudnnStatus_t CUDNNWINAPI cudnnSetConvolution2dDescriptor( cudnnConvolutionDescriptor_t convDesc,
                           ^

错误关键词:CUDNN_STATUS_RUNTIME_PREREQUISITE_MISSING
原因总结:cudnn版本问题
解决方案:下载新版caffe代码,将caffe/include/caffe/util/cudn.hpp文件替换成新版。

--------------------------------------------------------分割线---------------------------------------------------

2. 问题二:gcc版本问题

对‘google::base::CheckOpMessageBuilder::NewString()’未定义的引用
对‘google::base::CheckOpMessageBuilder::NewString()’未定义的引用
compute_image_mean.cpp:(.text.startup+0x13f):对‘google::SetUsageMessage(std::string const&)’未定义的引用
compute_image_mean.cpp:(.text.startup+0x247):对‘google::protobuf::MessageLite::ParseFromString(std::string const&)’未定义的引用
../lib/libcaffe.so.1.0.0:对‘google::protobuf::io::CodedOutputStream::WriteStringWithSizeToArray(std::string const&, unsigned char*)’未定义的引用
../lib/libcaffe.so.1.0.0:对‘google::protobuf::internal::WireFormatLite::ReadString(google::protobuf::io::CodedInputStream*, std::string*)’未定义的引用
../lib/libcaffe.so.1.0.0:对‘google::protobuf::Message::GetTypeName() const’未定义的引用
../lib/libcaffe.so.1.0.0:对‘google::protobuf::internal::StringTypeHandlerBase::Delete(std::string*)’未定义的引用
../lib/libcaffe.so.1.0.0:对‘google::protobuf::MessageFactory::InternalRegisterGeneratedFile(char const*, void (*)(std::string const&))’未定义的引用
../lib/libcaffe.so.1.0.0:对‘leveldb::DB::Open(leveldb::Options const&, std::string const&, leveldb::DB**)’未定义的引用
../lib/libcaffe.so.1.0.0:对‘google::protobuf::Message::DebugString() const’未定义的引用
../lib/libcaffe.so.1.0.0:对‘google::protobuf::internal::WireFormatLite::WriteBytesMaybeAliased(int, std::string const&, google::protobuf::io::CodedOutputStream*)’未定义的引用
../lib/libcaffe.so.1.0.0:对‘google::protobuf::internal::StringTypeHandlerBase::New()’未定义的引用
../lib/libcaffe.so.1.0.0:对‘google::protobuf::internal::empty_string_’未定义的引用
../lib/libcaffe.so.1.0.0:对‘google::protobuf::internal::NameOfEnum(google::protobuf::EnumDescriptor const*, int)’未定义的引用
../lib/libcaffe.so.1.0.0:对‘google::protobuf::internal::WireFormatLite::WriteString(int, std::string const&, google::protobuf::io::CodedOutputStream*)’未定义的引用
../lib/libcaffe.so.1.0.0:对‘leveldb::Status::ToString() const’未定义的引用
../lib/libcaffe.so.1.0.0:对‘google::protobuf::DescriptorPool::FindFileByName(std::string const&) const’未定义的引用
../lib/libcaffe.so.1.0.0:对‘google::protobuf::internal::WireFormatLite::ReadBytes(google::protobuf::io::CodedInputStream*, std::string*)’未定义的引用
../lib/libcaffe.so.1.0.0:对‘google::protobuf::Message::InitializationErrorString() const’未定义的引用

错误关键词:protobuf ××××××未定义的引用
原因总结:gcc的版本问题
解决方案:

  • 首先,去/usr/bin 目录下找到gcc右键属性,看它的软连接指向何处,如果软链指的不是gcc5.0删除它,同样的方式查看g++
  • 代码:
sudo ln -s /usr/bin/gcc-5 /usr/bin/gcc
sudo ln -s /usr/bin/g++-5 /usr/bin/g++
sudo ldconfig`

猜你喜欢

转载自blog.csdn.net/xw2017/article/details/82807409