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})
我正在尝试编译和构建一个同时使用 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})