ubuntu 16.04+Caffe:build_release/lib/libcaffe.so:对‘google::protobuf:

来源:互联网 发布:编程语言c 怎么用 编辑:程序博客网 时间:2024/06/07 05:36

只是希望能为同样问题的,提供一点查找问题的思路!

在按照《深度学习 21天实战Caffe》安装GPU的caffe,同时也参考其他的文章改好了Makefile.config和Makefile,但在 make -j还是出现很多问题:

错误:

CXX/LD -o .build_release/examples/cifar10/convert_cifar_data.bin
CXX/LD -o .build_release/examples/cpp_classification/classification.bin
.build_release/tools/convert_imageset.o:在函数‘std::string* google::MakeCheckOpString<unsigned long, int>(unsigned long const&, int const&, char const*)’中:
convert_imageset.cpp:(.text._ZN6google17MakeCheckOpStringImiEEPSsRKT_RKT0_PKc[_ZN6google17MakeCheckOpStringImiEEPSsRKT_RKT0_PKc]+0x50):对‘google::base::CheckOpMessageBuilder::NewString()’未定义的引用
.build_release/tools/convert_imageset.o:在函数‘main’中:
convert_imageset.cpp:(.text.startup+0x347):对‘google::SetUsageMessage(std::string const&)’未定义的引用
convert_imageset.cpp:(.text.startup+0xd2a):对‘google::protobuf::MessageLite::SerializeToString(std::string*) const’未定义的引用
.build_release/lib/libcaffe.so:对‘google::protobuf::Message::InitializationErrorString() const’未定义的引用
.build_release/lib/libcaffe.so:对‘google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(int, std::string const&, google::protobuf::io::CodedOutputStream*)’未定义的引用
.build_release/lib/libcaffe.so对‘google::protobuf::io::CodedOutputStream::WriteStringWithSizeToArray(std::string const&, unsigned char*)’未定义的引用
.build_release/lib/libcaffe.so:对‘google::protobuf::internal::WireFormatLite::ReadString(google::protobuf::io::CodedInputStream*, std::string*)’未定义的引用
.build_release/lib/libcaffe.so:对‘google::protobuf::Message::GetTypeName() const’未定义的引用
.build_release/lib/libcaffe.so:对‘google::protobuf::Message::DebugString() const’未定义的引用
.build_release/lib/libcaffe.so:对‘google::protobuf::internal::empty_string_’未定义的引用
.build_release/lib/libcaffe.so:对‘google::protobuf::MessageLite::ParseFromString(std::string const&)’未定义的引用
.build_release/lib/libcaffe.so:对‘google::protobuf::internal::NameOfEnum(google::protobuf::EnumDescriptor const*, int)’未定义的引用
.build_release/lib/libcaffe.so:对‘cv::imread(std::string const&, int)’未定义的引用
.build_release/lib/libcaffe.so:对‘google::protobuf::DescriptorPool::FindFileByName(std::string const&) const’未定义的引用
.build_release/lib/libcaffe.so:对‘google::protobuf::internal::WireFormatLite::ReadBytes(google::protobuf::io::CodedInputStream*, std::string*)’未定义的引用
.build_release/lib/libcaffe.so:对‘google::protobuf::internal::StringTypeHandlerBase::Delete(std::string*)’未定义的引用
.build_release/lib/libcaffe.so:对‘google::protobuf::MessageFactory::InternalRegisterGeneratedFile(char const*, void (*)(std::string const&))’未定义的引用
.build_release/lib/libcaffe.so:对‘leveldb::DB::Open(leveldb::Options const&, std::string const&, leveldb::DB**)’未定义的引用
.build_release/lib/libcaffe.so:对‘cv::imencode(std::string const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)’未定义的引用
.build_release/lib/libcaffe.so:对‘google::protobuf::internal::StringTypeHandlerBase::New()’未定义的引用
.build_release/lib/libcaffe.so:对‘google::protobuf::internal::WireFormatLite::WriteBytesMaybeAliased(int, std::string const&, google::protobuf::io::CodedOutputStream*)’未定义的引用
.build_release/lib/libcaffe.so:对‘leveldb::Status::ToString() const’未定义的引用
.build_release/lib/libcaffe.so:对‘google::protobuf::internal::WireFormatLite::WriteString(int, std::string const&, google::protobuf::io::CodedOutputStream*)’未定义的引用
collect2: error: ld returned 1 exit status
Makefile:625: recipe for target '.build_release/tools/convert_imageset.bin' failed
make: *** [.build_release/tools/convert_imageset.bin] Error 1
(省列很多一样的错误.........)

找到思路:在该链接(https://github.com/BVLC/caffe/wiki/GeForce-GTX-1080,---CUDA-8.0,---Ubuntu-16.04,---Caffe#compile-and-test-caffe-here)博主在第三问题给出思路。由于在本人电脑存在bantu中存在如下图的gcc version 5.3.1gcc (Ubuntu 4.9.3-13ubuntu2) 4.9.3两个版本,可以确定存在冲突,为此统一,把gcc 4.9.3升级


在下面用 gcc -V只能看到gcc (Ubuntu 4.9.3-13ubuntu2) 4.9.3版本


解决步骤:(指令都在截图里面了)

在上面的截图可以看出来,再次执行gcc -Vg++ -V时候,都是gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.5)


然后是正常的编译命令


最后是成功


用 echo $? 命令,返回0,则说明上个执行命令已经成功执行。

阅读全文
0 0