对“cvCreateBGCodeBookModel”的未定义引用

Posted

技术标签:

【中文标题】对“cvCreateBGCodeBookModel”的未定义引用【英文标题】:Undefined reference to `cvCreateBGCodeBookModel' 【发布时间】:2015-06-02 07:53:04 【问题描述】:

编译 C++ 代码时出现错误消息。

$g++ basic100.cpp -o test -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_objdetect
/tmp/ccWqj7E2.o: In function `main':
basic100.cpp:(.text+0x67): undefined reference to `cvCreateBGCodeBookModel'
basic100.cpp:(.text+0x2c6): undefined reference to `cvBGCodeBookUpdate'
basic100.cpp:(.text+0x31d): undefined reference to `cvBGCodeBookClearStale'
basic100.cpp:(.text+0x374): undefined reference to `cvBGCodeBookDiff'
basic100.cpp:(.text+0x3c8): undefined reference to `cvSegmentFGMask'
collect2: error: ld returned 1 exit status

代码在我朋友的笔记本电脑上运行良好。 我的系统是 32 位 Linux Mint,而他们有 64 位 Ubuntu 14.04。

在我朋友的笔记本电脑上使用的编译命令 $ g++ -o fff basic100.cpp pkg-config --cflags --libs opencv

这就是我使用 cvCreateBGCodeBoolModel() 的方式

(model definition :CvBGCodeBookModel* model = 0;//outside main())

    model = cvCreateBGCodeBookModel();

【问题讨论】:

你用谷歌搜索过什么吗? 看起来您缺少pkg-config --cflags 包含的库之一。在你朋友的机器上查看pkg-config 列出了哪些库。 感谢 molbdnilo,试图找出 cflags 的问题,我终于在 ffmpeg 中出错了。但最后我用 ubuntu 14.04 重新安装了系统,现在一切正常。我也觉得我的代码(背景减法)不适用于 Opencv 3.0。 【参考方案1】:

当我运行命令时

grep cvCreateBGCodeBookModel /usr/lib/x86_64-linux-gnu/libopencv_*.so

我得到结果

Binary file /usr/lib/x86_64-linux-gnu/libopencv_legacy.so matches

所以我假设您在编译中缺少-lopencv_legacy 标志。但我有一个 64 位系统。

你能检查一下是否有效吗?

【讨论】:

抱歉,在同一个问题上工作了很长时间,我被分层并安装了 ubuntu 14.04,现在一切正常。所以我不能再检查了。【参考方案2】:

可能是您缺少一些头文件。尝试自己制作码本结构。使用 opencv 3.0 您的代码将无法工作,因为您必须使用 BackgrundSubtractorMOG 类

【讨论】:

以上是关于对“cvCreateBGCodeBookModel”的未定义引用的主要内容,如果未能解决你的问题,请参考以下文章

初一数学教案有序数对

如何对List 进行排序

根据对的第二个值查找对向量的上限

算法之逆序对

10:素数对

向量对还是向量对?