Typical Linker error: Undefined reference to CV methods in c++

Typical Linker error: Undefined reference to CV methods in c++

我正在尝试编译和构建一个同时使用 ROS 和 OpenCV 库的项目。我的 .cpp 文件在 src 文件夹中,.h 文件在 include 文件夹中。

这是我的 CMakeLists.txt 文件:

cmake_minimum_required(VERSION 2.8.3)
project(uwsim_imgproc)

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

find_package(catkin REQUIRED COMPONENTS
  cv_bridge
  roscpp
  sensor_msgs
  std_msgs
  image_transport
)

find_package(OpenCV REQUIRED)

catkin_package(
INCLUDE_DIRS include
LIBRARIES uwsim_imgproc filters
CATKIN_DEPENDS cv_bridge roscpp sensor_msgs std_msgs
#  DEPENDS system_lib
)

include_directories(
  ${catkin_INCLUDE_DIRS}
  ${OpenCV_INCLUDE_DIRS} 
  include
)

link_directories( 
  ${OpenCV_LINK_DIRS}
)

add_library(filters
        src/Obstacle.cpp
        src/HorizonDetector.cpp
        src/GenericTools.cpp
        src/Kalman.cpp
        src/HungarianAlg.cpp
        src/Ctracker.cpp
)

add_executable(cameraSubscriber src/main.cpp)

add_dependencies(cameraSubscriber ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

target_link_libraries(cameraSubscriber
   ${catkin_LIBRARIES}
   ${OpenCV_LIBRARIES}
   filters
 )

当我启动在内部运行 make 的 catkin_make 时,我得到了这个错误:

lib/libfilters.so: undefined reference to `cv::KalmanFilter::predict(cv::Mat const&)'
lib/libfilters.so: undefined reference to `cv::KalmanFilter::correct(cv::Mat const&)'
lib/libfilters.so: undefined reference to `cv::KalmanFilter::KalmanFilter(int, int, int, int)'
lib/libfilters.so: undefined reference to `cv::groupRectangles(std::vector<cv::Rect_<int>, std::allocator<cv::Rect_<int> > >&, int, double)'

我看了类似的问题,但提供的解决方案不适合我。

有什么想法吗?

如您的错误输出所示,filters 库使用 OpenCV 库中的符号,但未与之链接。您的 CMakeLists.txt 应该这样做:

target_link_libraries(filters ${OpenCV_LIBRARIES})