首页 > 解决方案 > libopencv_optflow 可能不包含在 optflow.hpp 中指定的所有函数定义

问题描述

我已经安装了OpenCV 4.0,并且在 Makefile 中我指定了 opencv 额外模块的路径,但是当我尝试运行我的GoLang项目时,该项目使用C++中创建的 OpenCV 函数(我已将C++代码包装在我包含在GoLang中的C库中) 我得到“未定义的参考错误”。

问题是,当我将自己定位在包含我需要的函数声明的/usr/local/include文件时,但我的文件夹(我假设应该位于源文件的位置)是空的。或者根本没有源文件并且所有源文件都已内置,在这种情况下,我仍然不确定为什么会收到“未定义的引用”错误消息。optflow.hpp/usr/local/src/usr/local/lib

是不是已经建好的optflow.hpp和libopencv_optflow库不兼容?如果是这样,我该如何解决?

有什么建议么?

标签: c++opencv

解决方案


使用 Cmake 配置构建和链接的参数要好得多。由于 -std=c++11 可能会出现这种问题,但是 Cmake 为您的 make 文件准备了非常复杂的设置,典型的结果是像您这样的问题并且找不到 imread 等等。我在为 opencv 4 设置 make 文件以直接从 Visual Studio Visual Studio构建项目时遇到很多麻烦

另一个想法是链接库。您可能会错过 opencv 库使用的动态依赖项中的某些内容。Cmake 为你解决了这个配置。

g++" -W"switch" -W"no-deprecated-declarations" -W"empty-body" -W"conversion" -W"return-type" -W"括号" -W"no-pointer-sign" - W"no-format" -W"uninitialized" -W"unreachable-code" -W"unused-function" -W"unused-value" -W"unused-variable" -std=c++11 -w -fno -strict-aliasing -I "/usr/local/include/opencv4/opnecv2" -g0 "g++" -O2 "3600000" -fno-threadsafe-statics -D "NDEBUG" -W"switch" -W"no-deprecated -declarations" -W"empty-body" -W"conversion" -W"return-type" -W"括号" -W"no-format" -W"uninitialized" -W"unreachable-code" -W"unused -function" -W"未使用值"-W"未使用变量"-fno-rtti -fno-omit-frame-pointer -std=c11 -fno-exceptions "1" -o r

和链接器参数为

Linker opencv 4 configuration part is more tricky

库依赖 -l"opencv_core" -l"opencv_imgcodecs" -l"opencv_imgproc" -l"opencv_video" -l"opencv_videoio" -l"pthread" -l"jpeg" -l"gcc_s" -l"stdc++" -l" tbb" -l"rt" -l"dl" -l"m" -l"z" -l"png16" -l"c"  

您只是在没有 -l opencv_core opencv_imgcodecs opencv_imgproc opencv_video opencv_videoio pthread jpeg gcc_s stdc++ tbb rt dl m z png16 c 的情况下将以下值填充到库依赖项选项中


推荐阅读