【问题标题】:undefined reference to some of the opencv functions对一些 opencv 函数的未定义引用
【发布时间】:2015-05-12 10:03:09
【问题描述】:

我正在尝试在 Ubuntu 14.04 环境中编译 opencv 示例附带的 'motemple.c'。我认为 opencv 已正确安装;大多数程序都按预期运行。但是,在编译上述文件时,会为多个函数引发错误“未定义的引用”。下面是编译的输出:

Building target: ACTION_detection1
Invoking: Cross G++ Linker
g++ -L/usr/local/lib -o "ACTION_detection1"  ./opencvexample/MotionSegmentation.o   -lopencv_core -lopencv_photo -lopencv_videoio -lopencv_videostab -lopencv_imgcodecs -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann
./opencvexample/MotionSegmentation.o: In function `update_mhi':
/media/thanuja/DTR_DATA/ACTION-TV/ACTIONDETECTION/Implementations/ACTION_detection1/Debug/../opencvexample/MotionSegmentation.cpp:103: undefined reference to `cvUpdateMotionHistory'
/media/thanuja/DTR_DATA/ACTION-TV/ACTIONDETECTION/Implementations/ACTION_detection1/Debug/../opencvexample/MotionSegmentation.cpp:105: undefined reference to `cvUpdateMotionHistory'
/media/thanuja/DTR_DATA/ACTION-TV/ACTIONDETECTION/Implementations/ACTION_detection1/Debug/../opencvexample/MotionSegmentation.cpp:114: undefined reference to `cvCalcMotionGradient'
/media/thanuja/DTR_DATA/ACTION-TV/ACTIONDETECTION/Implementations/ACTION_detection1/Debug/../opencvexample/MotionSegmentation.cpp:123: undefined reference to `cvSegmentMotion'
/media/thanuja/DTR_DATA/ACTION-TV/ACTIONDETECTION/Implementations/ACTION_detection1/Debug/../opencvexample/MotionSegmentation.cpp:149: undefined reference to `cvCalcGlobalOrientation'
collect2: error: ld returned 1 exit status
make: *** [ACTION_detection1] Error 1

可以看出,我已将所有 opencv 库链接到 mu Eclipse 项目。我还尝试了here 提供的命令行解决方案,但仍然出现相同的错误。

【问题讨论】:

  • 很难说是什么问题。您“认为opencv已正确安装”是什么意思?你是怎么安装的?
  • 对不起,如果术语令人困惑。我遵循了 opencv 文档和简单程序(如查看图像、播放视频和颜色增强等)中的指南,工作正常。问题似乎在于这些运动分割函数集。
  • windows 环境中也出现了同样的错误。但是添加链接器库 opencv_video 解决了这些问题。即使添加了这个库,Ubuntu 中的问题仍然存在。你知道如何解决这个问题吗?

标签: c++ eclipse opencv linker


【解决方案1】:

它们已从主存储库替换为opencv_contrib。您可以在optflow 模块中找到它们。

注意:cvUpdateMotionHistorycvCalcMotionGradient 等是 OpenCV 1.x API 函数的名称,它们现在已过时/过时,因此请尝试通过替换为 cv::updateMotionHistorycv::calcMotionGradient 等来避免使用它们。

【讨论】:

  • 谢谢。我相信情况就是这样。我尝试的工作是旧版本的opencv。
猜你喜欢
  • 2020-06-26
  • 2011-09-25
  • 1970-01-01
  • 2012-06-23
  • 2016-04-02
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多