2016-11-22 7 views
0

Я уже настроил и создал Caffe с нуля в режимах CPU_ONLY и GPU_ONLY (с соответствующими образцами и инструментами); и довольно удовлетворены результатами из коробки.Building Caffe cpp_classification пример во внешнем контексте

Однако я начинаю свой собственный проект, полученный из примера cpp_classification, и испытывает трудности с его созданием независимо от общей системы сборки Caffe. Таким образом, я вернулся к примеру cpp_classification и работал над созданием этого как автономного (просто для того, чтобы я ничего не оставлял) и сталкивался с подобными ошибками.

Я разделяю содержимое вывода ошибок сборки и CMakeLists.txt с вами в надежде, что кто-то, кто успешно поднял пример cpp_classification, может предоставить руководство.

я сузил Моделировочные ошибки я получаю к следующему:

Scanning dependencies of target cpp_classification 
[ 50%] Building CXX object CMakeFiles/cpp_classification.dir/classification.cpp.o 
[100%] Linking CXX executable cpp_classification 
CMakeFiles/cpp_classification.dir/classification.cpp.o: In function `Classifier::Classifier(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': 
/home/rudycazabon/caffe/examples/cpp_classification/classification.cpp:62: undefined reference to `caffe::Net<float>::Net(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, caffe::Phase, int, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const*, caffe::Net<float> const*)' 
/home/rudycazabon/caffe/examples/cpp_classification/classification.cpp:63: undefined reference to `caffe::Net<float>::CopyTrainedLayersFrom(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)' 
CMakeFiles/cpp_classification.dir/classification.cpp.o: In function `Classifier::SetMean(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': 
/home/rudycazabon/caffe/examples/cpp_classification/classification.cpp:124: undefined reference to `caffe::BlobProto::BlobProto()' 
/home/rudycazabon/caffe/examples/cpp_classification/classification.cpp:129: undefined reference to `caffe::Blob<float>::FromProto(caffe::BlobProto const&, bool)' 
/home/rudycazabon/caffe/examples/cpp_classification/classification.cpp:135: undefined reference to `caffe::Blob<float>::mutable_cpu_data()' 
/home/rudycazabon/caffe/examples/cpp_classification/classification.cpp:124: undefined reference to `caffe::BlobProto::~BlobProto()' 
/home/rudycazabon/caffe/examples/cpp_classification/classification.cpp:124: undefined reference to `caffe::BlobProto::~BlobProto()' 
CMakeFiles/cpp_classification.dir/classification.cpp.o: In function `Classifier::Predict(cv::Mat const&)': 
/home/rudycazabon/caffe/examples/cpp_classification/classification.cpp:156: undefined reference to `caffe::Blob<float>::Reshape(int, int, int, int)' 
/home/rudycazabon/caffe/examples/cpp_classification/classification.cpp:158: undefined reference to `caffe::Net<float>::Reshape()' 
/home/rudycazabon/caffe/examples/cpp_classification/classification.cpp:165: undefined reference to `caffe::Net<float>::Forward(float*)' 
/home/rudycazabon/caffe/examples/cpp_classification/classification.cpp:169: undefined reference to `caffe::Blob<float>::cpu_data() const' 
CMakeFiles/cpp_classification.dir/classification.cpp.o: In function `Classifier::WrapInputLayer(std::vector<cv::Mat, std::allocator<cv::Mat> >*)': 
/home/rudycazabon/caffe/examples/cpp_classification/classification.cpp:184: undefined reference to `caffe::Blob<float>::mutable_cpu_data()' 
CMakeFiles/cpp_classification.dir/classification.cpp.o: In function `Classifier::Preprocess(cv::Mat const&, std::vector<cv::Mat, std::allocator<cv::Mat> >*)': 
/home/rudycazabon/caffe/examples/cpp_classification/classification.cpp:227: undefined reference to `caffe::Blob<float>::cpu_data() const' 
CMakeFiles/cpp_classification.dir/classification.cpp.o: In function `caffe::Caffe::set_mode(caffe::Caffe::Brew)': 
/home/rudycazabon/caffe/distribute/include/caffe/common.hpp:148: undefined reference to `caffe::Caffe::Get()' 
CMakeFiles/cpp_classification.dir/classification.cpp.o: In function `caffe::ReadProtoFromBinaryFileOrDie(char const*, google::protobuf::Message*)': 
/home/rudycazabon/caffe/distribute/include/caffe/util/io.hpp:78: undefined reference to `caffe::ReadProtoFromBinaryFile(char const*, google::protobuf::Message*)' 
collect2 

Моих соответствующему CMakeList.txt выглядит следующим образом:

cmake_minimum_required(VERSION 3.6) 
project(cpp_classification) 
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") 

set(CAFFE_HOME ~/caffe/distribute) 

find_package(OpenCV REQUIRED) 
find_package(Caffe REQUIRED) 
find_package(GTest REQUIRED) 
find_package(glog REQUIRED) 
find_package(Boost REQUIRED COMPONENTS system) 
find_package(Protobuf REQUIRED) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

set(SOURCE_FILES classification.cpp) 

include_directories(${CAFFE_HOME}/include ${Boost_INCLUDE_DIRS}) 
link_directories(${CAFFE_HOME}/lib ${Boost_LIBRARY_DIRS}) 

add_executable(cpp_classification 
     ${SOURCE_FILES} 
     ${GLOG_INCLUDE_DIR} 
     ${Caffe_INCLUDE_DIR} 
     ${Protobuf_INCLUDE_DIR}) 

TARGET_LINK_LIBRARIES(cpp_classification 
     ${OpenCV_LIBS} 
     ${Boost_LIBRARIES} 
     ${GLOG_LIBRARY} 
     ${CAFFE_LIBRARY} 
     ${Protobuf_LIBRARY}) 

ответ

0

попробовать с

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GLIBCXX_USE_CXX11_ABI=0")

Он сообщает gcc использовать старый ABI для <string>.

 Смежные вопросы

  • Нет связанных вопросов^_^