Неопределенные символы для архитектуры x86_64: «vtkDebugLeaksManager :: vtkDebugLeaksManager ()», на который ссылаются из: - PullRequest
0 голосов
/ 21 сентября 2019

Я столкнулся со следующим исключением при создании простого .cpp файла, который включает c pcl_visualizer.h.Только в комплекте!

Здание IDE CLion

[ 50%] Building CXX object CMakeFiles/untitled2.dir/main.cpp.o
[100%] Linking CXX executable untitled2
Undefined symbols for architecture x86_64:
  "vtkDebugLeaksManager::vtkDebugLeaksManager()", referenced from:
      ___cxx_global_var_init.3 in main.cpp.o
  "vtkDebugLeaksManager::~vtkDebugLeaksManager()", referenced from:
      ___cxx_global_var_init.3 in main.cpp.o
  "vtkObjectFactoryRegistryCleanup::vtkObjectFactoryRegistryCleanup()", referenced from:
      ___cxx_global_var_init.4 in main.cpp.o
  "vtkObjectFactoryRegistryCleanup::~vtkObjectFactoryRegistryCleanup()", referenced from:
      ___cxx_global_var_init.4 in main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [untitled2] Error 1
make[2]: *** [CMakeFiles/untitled2.dir/all] Error 2
make[1]: *** [CMakeFiles/untitled2.dir/rule] Error 2

Вот моя конфигурация CMakeLists.txt

cmake_minimum_required(VERSION 3.14)
project(untitled2)

include_directories(
        "/usr/local/include/pcl-1.9"
        "/usr/local/include/eigen3"
        "/usr/local/include/vtk/8.2.0"
        "/usr/local/include/flann/"
        "/usr/local/Cellar/boost/1.71.0/include"
        "/usr/local/Cellar/vtk/8.2.0_3/include/vtk-8.2"
)

link_directories(
        "/usr/local/lib/"
)
set(CMAKE_CXX_STANDARD 17)
add_executable(untitled2 main.cpp)

1 Ответ

1 голос
/ 21 сентября 2019

CMakeLists.txt не должен быть таким многословным, хрупким.Более того, вы не связываете библиотеки, а просто указываете пути для поиска. Связанные

Документы для link_directories Как говорится в документации, это плохая практика, поскольку find_package должен делать все это для вас.

Вам необходимо указать target_link_libraries, чтобы найти символы.

Я использую следующее ( ссылка на репо ):

cmake_minimum_required(VERSION 3.5)
project(pcl_cmake_minimum)

find_package(PCL COMPONENTS common)

add_executable(pcl_demo main.cpp)

target_link_libraries(pcl_demo ${PCL_LIBRARIES})
...