【问题标题】:Can't compile opencv : undefined reference imread etc无法编译 opencv:未定义的参考 imread 等
【发布时间】:2020-07-19 04:59:04
【问题描述】:

我想编译这个 OpenCV 的例子:https://docs.opencv.org/ref/master/d3/d50/group__imgproc__colormap.html

当我想编译时:g++ myfile.cxx -o myfile 我得到这个错误:

fatal error opencv2/core.hpp not such file or directory

所以我打开 .bashrc 并添加:export PATH=${PATH}:/usr/local/include/opencv4,当我编译时,我现在这样做:g++ myfile.cxx -o myfile -I/usr/include/opencv4

现在我收到很多关于未定义引用的错误:

/usr/bin/ld : /tmp/ccISlbHF.o : dans la fonction « main » :
tryopencv.cxx:(.text+0xb1) : référence indéfinie vers « cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int) »
/usr/bin/ld : tryopencv.cxx:(.text+0x195) : référence indéfinie vers « cv::applyColorMap(cv::_InputArray const&, cv::_OutputArray const&, int) »
/usr/bin/ld : tryopencv.cxx:(.text+0x20e) : référence indéfinie vers « cv::imshow(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&) »
/usr/bin/ld : tryopencv.cxx:(.text+0x245) : référence indéfinie vers « cv::waitKey(int) »
/usr/bin/ld : /tmp/ccISlbHF.o : dans la fonction « cv::Mat::~Mat() » :
tryopencv.cxx:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x3d) : référence indéfinie vers « cv::fastFree(void*) »
/usr/bin/ld : /tmp/ccISlbHF.o : dans la fonction « cv::Mat::release() » :
tryopencv.cxx:(.text._ZN2cv3Mat7releaseEv[_ZN2cv3Mat7releaseEv]+0x4f) : référence indéfinie vers « cv::Mat::deallocate() »
collect2: error: ld returned 1 exit status

我在很多论坛上搜索,很多人谈论这个:pkg-config opencv --cflags --libs 我需要输入这个命令 opencv4 而不是 opencv 因为它不起作用并且使用 opencv4 我得到了这个:

-I/usr/include/opencv4/opencv -I/usr/include/opencv4 -lopencv_stitching -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_highgui -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_quality -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_shape -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_ml -lopencv_videostab -lopencv_videoio -lopencv_viz -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core

我有点迷茫:如何解决使用 OpenCV 编译和测试的问题?

【问题讨论】:

标签: c++ opencv


【解决方案1】:

你可以在编译命令中使用pkg-config

g++ myfile.cxx -o myfile `pkg-config opencv4 --cflags --libs`

它将设置包含路径和库

【讨论】:

  • 是的,我忘记了命令之间的 $ 和 () 或 ``,这就是命令不起作用的原因!非常感谢!
【解决方案2】:

您必须将库添加到编译器命令(-l 参数):

g++ myfile.cxx -o myfile  -I/usr/include/opencv4 -lopencv_stitching -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_highgui -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_quality -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_shape -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_ml -lopencv_videostab -lopencv_videoio -lopencv_viz -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core

需要的,可能不是全部。

【讨论】:

  • 是的,感谢您的回答!其他 cmets 建议将 pkg-config opencv4 --cflags --libs 或 $(pkg-config opencv4 --cflags --libs) 代替参数放在终端上更清楚,但非常感谢!
  • @Newbi 是的,使用pkg-config 更容易、更安全(因为包含和库可能会在软件升级时发生变化)。您应该接受@ThomasSabik 回复。我的回答只是向您展示这些库也有链接器选项。
猜你喜欢
  • 1970-01-01
  • 2014-07-25
  • 2022-10-15
  • 1970-01-01
  • 2015-01-14
  • 1970-01-01
  • 2015-10-23
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多