编译Caffe_SSD遇到的Bug及解决方法
cannot find #include "caffe/proto/caffe.pb.h
手动编译 caffe.prototxt
, 在Caffe根目录下执行:
protoc src/caffe/proto/caffe.proto --cpp_out=.
mkdir include/caffe/proto
mv src/caffe/proto/caffe.pb.h include/caffe/proto
protoc版本问题
如果protoc版本为3.6.0,则需要手动编译caffe.prototxt
,并在CMakeList及MakeFile中增加c++ 11支持
-
CMakeList
1
2
3
4
5---[ Flags
if(UNIX OR APPLE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -std=c++11")
endif()if() -
MakeFile
1
2
3NVCCFLAGS += -std=c++11
CXXFLAGS += -std=c++11
LINKFLAGS += -std=c++11
json_parser_read.hpp:257:264: error: ‘type name’ declared as function returning an array escape
-
在
src/caffe/layers/
下打开detection_output_layer.cpp
和detection_output_layer.cu
注释掉:1
write_json(ss,output);
-
在
include/caffe/layers/
下打开detection_output_layer.hpp
注释掉:1
//#include <boost/property_tree/json_parser.hpp>
Undefined reference to google protobuf **
问题:
.build_release/lib/libcaffe.so: undefined reference to `google::protobuf::io::CodedOutputStream::WriteVarint64ToArray(unsigned long long, unsigned char*)'
.build_release/lib/libcaffe.so: undefined reference to `google::protobuf::internal::WireFormatLite::WriteInt64(int, long long, google::protobuf::io::CodedOutputStream*)'
.build_release/lib/libcaffe.so: undefined reference to `google::protobuf::UnknownFieldSet::AddVarint(int, unsigned long long)'
.build_release/lib/libcaffe.so: undefined reference to `google::protobuf::io::CodedOutputStream::VarintSize64(unsigned long long)'
.build_release/lib/libcaffe.so: undefined reference to `google::protobuf::io::CodedOutputStream::WriteVarint64(unsigned long long)'
解决办法:
-
执行
pkg-config --libs protobuf
,并将得到的结果加入到Makefile中LINKFLAGS
之后。如下所示,加入-pthread -lprotobuf -lpthread
即可1
2nr@linux ~ % pkg-config --libs protobuf
-pthread -lprotobuf -lpthread