C++ macos:如何在咖啡馆使用CLion?

C++ macos:如何在咖啡馆使用CLion?,c++,macos,caffe,C++,Macos,Caffe,使用gcc编译是可以的: Undefined symbols for architecture x86_64: "caffe::Blob<float>::mutable_cpu_data()", referenced from: _main in main.cpp.o "caffe::Blob<float>::Reshape(int, int, int, int)", referenced from: _main in main.cpp.o

使用gcc编译是可以的:

Undefined symbols for architecture x86_64:
  "caffe::Blob<float>::mutable_cpu_data()", referenced from:
      _main in main.cpp.o
  "caffe::Blob<float>::Reshape(int, int, int, int)", referenced from:
      _main in main.cpp.o
  "google::LogMessage::stream()", referenced from:
      caffe::Blob<float>::LegacyShape(int) const in main.cpp.o
      caffe::Blob<float>::offset(int, int, int, int) const in main.cpp.o
      caffe::Blob<float>::CanonicalAxisIndex(int) const in main.cpp.o
  "google::LogMessageFatal::LogMessageFatal(char const*, int, google::CheckOpString const&)", referenced from:
      caffe::Blob<float>::LegacyShape(int) const in main.cpp.o
      caffe::Blob<float>::offset(int, int, int, int) const in main.cpp.o
      caffe::Blob<float>::CanonicalAxisIndex(int) const in main.cpp.o
  "google::LogMessageFatal::~LogMessageFatal()", referenced from:
      caffe::Blob<float>::LegacyShape(int) const in main.cpp.o
      caffe::Blob<float>::offset(int, int, int, int) const in main.cpp.o
      caffe::Blob<float>::CanonicalAxisIndex(int) const in main.cpp.o
  "google::base::CheckOpMessageBuilder::ForVar2()", referenced from:
      std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >* google::MakeCheckOpString<int, int>(int const&, int const&, char const*) in main.cpp.o
  "google::base::CheckOpMessageBuilder::NewString[abi:cxx11]()", referenced from:
      std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >* google::MakeCheckOpString<int, int>(int const&, int const&, char const*) in main.cpp.o
  "google::base::CheckOpMessageBuilder::CheckOpMessageBuilder(char const*)", referenced from:
      std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >* google::MakeCheckOpString<int, int>(int const&, int const&, char const*) in main.cpp.o
  "google::base::CheckOpMessageBuilder::~CheckOpMessageBuilder()", referenced from:
      std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >* google::MakeCheckOpString<int, int>(int const&, int const&, char const*) in main.cpp.o
  "caffe::Blob<float>::sumsq_data() const", referenced from:
      _main in main.cpp.o
  "caffe::Blob<float>::cpu_data() const", referenced from:
      caffe::Blob<float>::data_at(int, int, int, int) const in main.cpp.o
  "caffe::Blob<float>::asum_data() const", referenced from:
      _main in main.cpp.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
make[3]: *** [caffe] Error 1
make[2]: *** [CMakeFiles/caffe.dir/all] Error 2
make[1]: *** [CMakeFiles/caffe.dir/rule] Error 2
make: *** [caffe] Error 2
gcc-o test_blob test_blob.cpp-D仅限CPU-lcaffe-lstdc++-lglog

但在CLion,出现了以下错误:

Undefined symbols for architecture x86_64:
  "caffe::Blob<float>::mutable_cpu_data()", referenced from:
      _main in main.cpp.o
  "caffe::Blob<float>::Reshape(int, int, int, int)", referenced from:
      _main in main.cpp.o
  "google::LogMessage::stream()", referenced from:
      caffe::Blob<float>::LegacyShape(int) const in main.cpp.o
      caffe::Blob<float>::offset(int, int, int, int) const in main.cpp.o
      caffe::Blob<float>::CanonicalAxisIndex(int) const in main.cpp.o
  "google::LogMessageFatal::LogMessageFatal(char const*, int, google::CheckOpString const&)", referenced from:
      caffe::Blob<float>::LegacyShape(int) const in main.cpp.o
      caffe::Blob<float>::offset(int, int, int, int) const in main.cpp.o
      caffe::Blob<float>::CanonicalAxisIndex(int) const in main.cpp.o
  "google::LogMessageFatal::~LogMessageFatal()", referenced from:
      caffe::Blob<float>::LegacyShape(int) const in main.cpp.o
      caffe::Blob<float>::offset(int, int, int, int) const in main.cpp.o
      caffe::Blob<float>::CanonicalAxisIndex(int) const in main.cpp.o
  "google::base::CheckOpMessageBuilder::ForVar2()", referenced from:
      std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >* google::MakeCheckOpString<int, int>(int const&, int const&, char const*) in main.cpp.o
  "google::base::CheckOpMessageBuilder::NewString[abi:cxx11]()", referenced from:
      std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >* google::MakeCheckOpString<int, int>(int const&, int const&, char const*) in main.cpp.o
  "google::base::CheckOpMessageBuilder::CheckOpMessageBuilder(char const*)", referenced from:
      std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >* google::MakeCheckOpString<int, int>(int const&, int const&, char const*) in main.cpp.o
  "google::base::CheckOpMessageBuilder::~CheckOpMessageBuilder()", referenced from:
      std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >* google::MakeCheckOpString<int, int>(int const&, int const&, char const*) in main.cpp.o
  "caffe::Blob<float>::sumsq_data() const", referenced from:
      _main in main.cpp.o
  "caffe::Blob<float>::cpu_data() const", referenced from:
      caffe::Blob<float>::data_at(int, int, int, int) const in main.cpp.o
  "caffe::Blob<float>::asum_data() const", referenced from:
      _main in main.cpp.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
make[3]: *** [caffe] Error 1
make[2]: *** [CMakeFiles/caffe.dir/all] Error 2
make[1]: *** [CMakeFiles/caffe.dir/rule] Error 2
make: *** [caffe] Error 2


我应该如何编辑CMakeLists.txt?

您的CMake项目似乎与
gcc
编译非常不同。我将设法使两者和解

首先,
gcc
-l
标志是指编译后应链接到可执行文件的库。CMakeLists.txt文件还应链接这些库。您的可执行文件实际上应该是
test\u blob
,并且您的项目不能命名为
caffe
,因为您正在使用
caffe
库。CMakeLists.txt应采用以下格式:

cmake_minimum_required(VERSION 3.5)          # using modern CMake
project(blob)                                # names your project 

find_package(glog)                           # finds your installation of glog
find_package(caffe)                          # finds your installation of caffe

set(CMAKE_CXX_STANDARD 11)                   # sets the "-std=c++11" flag
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_C_COMPILER "/usr/local/Cellar/gcc/7.2.0/bin/") 

set(SOURCE_FILES test_blob.cpp) 
add_executable(test_blob ${SOURCE_FILES})    # creates the executable
target_link_libraries(test_blob glog caffe)  # links the test_blob target to glog and caffe
target_compile_definitions(test_blob PUBLIC CPU_ONLY=on)

这应该可以修复你的链接错误。

@Jiahua你应该将此作为公认的答案,让人们知道它解决了问题是的,谢谢提醒,这是我第一次使用stackoverflow提问。