opencv_ml 和 opencv_objdetect 对 cv::ml 的未定义引用
undefined reference to cv::ml with opencv_ml and opencv_objdetect
在开发程序时,尝试用opencv打开一个CSV文件。我写了
#include <opencv2/opencv.hpp>
#include <opencv2/ml.hpp>
// ...
cv::Ptr<cv::ml::TrainData> mlData = cv::ml::TrainData::loadFromCSV("train.csv", 1);
根据 OpenCV 文档,我的 CMakeLists.txt 是
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
link_directories(${OpenCV_LIBRARY_DIRS})
message(STATUS "${OpenCV_LIBS}")
add_executable(Test ${EXAMPLE_DIR}/test.cpp)
target_link_libraries(Test ${OpenCV_LIBS} ${PROJECT_NAME})
但是我得到了一个未定义的错误:
undefined reference to `cv::ml::TrainData::loadFromCSV(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, int, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char, char)'
我知道这是因为一些 opencv 库没有链接。然而,Print-Info In CMakeLists.txt 告诉我:
-- opencv_calib3d;opencv_core;opencv_dnn;opencv_features2d;opencv_flann;opencv_gapi;opencv_highgui;opencv_imgcodecs;opencv_imgproc;opencv_ml;opencv_objdetect;opencv_photo;opencv_stitching;opencv_video;opencv_videoio
似乎我链接了所有我能链接的库,但我仍然遇到未定义的错误。
好的,经过多次编译和仔细考虑,我终于找到了我程序的问题。
最大的问题是 link 顺序。我只是把 ${OpenCV_LIBS}
放在 ${PROJECT_NAME}
之前。当我写道:
target_link_libraries(Test ${PROJECT_NAME} ${OpenCV_LIBS})
target_link_libraries(Train ${PROJECT_NAME} ${OpenCV_LIBS})
那么一切都好。
在开发程序时,尝试用opencv打开一个CSV文件。我写了
#include <opencv2/opencv.hpp>
#include <opencv2/ml.hpp>
// ...
cv::Ptr<cv::ml::TrainData> mlData = cv::ml::TrainData::loadFromCSV("train.csv", 1);
根据 OpenCV 文档,我的 CMakeLists.txt 是
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
link_directories(${OpenCV_LIBRARY_DIRS})
message(STATUS "${OpenCV_LIBS}")
add_executable(Test ${EXAMPLE_DIR}/test.cpp)
target_link_libraries(Test ${OpenCV_LIBS} ${PROJECT_NAME})
但是我得到了一个未定义的错误:
undefined reference to `cv::ml::TrainData::loadFromCSV(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, int, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char, char)'
我知道这是因为一些 opencv 库没有链接。然而,Print-Info In CMakeLists.txt 告诉我:
-- opencv_calib3d;opencv_core;opencv_dnn;opencv_features2d;opencv_flann;opencv_gapi;opencv_highgui;opencv_imgcodecs;opencv_imgproc;opencv_ml;opencv_objdetect;opencv_photo;opencv_stitching;opencv_video;opencv_videoio
似乎我链接了所有我能链接的库,但我仍然遇到未定义的错误。
好的,经过多次编译和仔细考虑,我终于找到了我程序的问题。
最大的问题是 link 顺序。我只是把 ${OpenCV_LIBS}
放在 ${PROJECT_NAME}
之前。当我写道:
target_link_libraries(Test ${PROJECT_NAME} ${OpenCV_LIBS})
target_link_libraries(Train ${PROJECT_NAME} ${OpenCV_LIBS})
那么一切都好。