在開發程式時,我嘗試使用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 庫沒有鏈接。但是,CMakeLists.txt 中的 Print-Info 告訴我:
-- 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
似乎我鏈接了所有可以鏈接的庫,但仍然出現未定義的錯誤。
uj5u.com熱心網友回復:
好的,經過多次編譯和仔細考慮,我終于找到了我的程式有什么問題。
最大的問題是鏈接順序。我${OpenCV_LIBS}之前剛放${PROJECT_NAME}。當我寫道:
target_link_libraries(Test ${PROJECT_NAME} ${OpenCV_LIBS})
target_link_libraries(Train ${PROJECT_NAME} ${OpenCV_LIBS})
那么一切都很好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/365634.html
