对 `cv::VideoCapture::VideoCapture(int)` 的未定义引用

7
我正在尝试使用C++和OpenCV来使用我的网络摄像头,但是我遇到了以下错误:

(...):Images.cpp:(.text+0x27): undefined reference to cv::VideoCapture::VideoCapture(int)

(...):Images.cpp:(.text+0x38): undefined reference to cv::VideoCapture::~VideoCapture()

(...):Images.cpp:(.text$_ZN2cv6StringD1Ev[_ZN2cv6StringD1Ev]+0x11): undefined reference to cv::String::deallocate() ...

我的代码如下:
#include <iostream>
#include <string.h>
#include "opencv2/core/core.hpp"
#include "opencv2/opencv.hpp"
#include "opencv2/videoio/videoio.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/video.hpp"
#include "opencv2/imgproc/imgproc.hpp"

using namespace std;
using namespace cv;


int main(int argc, char const *argv[])
{
    VideoCapture cap(0);
    return 0;
}

1
你链接了哪些库?很可能你缺少了一些。 - Lakshya Kejriwal
你是如何编译你的程序的? - Lakshya Kejriwal
@shawshank g++ main.cpp -o main - Felipe Machado
你知道 opencv 安装的路径吗? - Lakshya Kejriwal
@shawshank 是的 - Felipe Machado
显示剩余4条评论
4个回答

14

在使用 opencv 版本 3.4.3 时我遇到了相同的问题。

参考此示例,我发现我没有包含 libopencv_videoio 库。一旦将其添加到项目中,构建就成功了。

在 opencv 版本 3 中,我认为我们还需要包含库 -lopencv_videoio 才能使用 VideoCapture。


1
一个奇怪的事情。在检查了opencv.pc文件中是否有opencv_videoio之后,"g++ -Wall -o test2 pkg-config --libs opencv test2.cpp"仍然无法工作,但是"g++ -Wall -o test2 test.cpp pkg-config --libs opencv"却可以正常工作。 - Gavin Simpson

4

你的代码无法编译是因为你没有给出库和头文件的路径。尝试使用以下命令来编译代码。

g++ main.cpp -o main -I <path to opencv header files> -L <path to opencv libraries> -l<name of libraries>

如果您使用的是Linux系统,则以下是一个示例:
g++ main.cpp -o main -I /usr/local/include -L /usr/local/lib -lopencv_core -lopencv_highgui

假设您的头文件在/usr/local/include中,库在/usr/local/lib中,且lopencv_core是您的库名称。


但是我与其他OpenCV文件一起编译代码。只有这个文件,代码才无法工作。不管怎样,我会尝试的。 - Felipe Machado
是的,同样的错误。如果我删除 VideoCapture cap(0); 那段代码会编译成功。 - Felipe Machado
在编译代码时,你包含了哪些库? - Lakshya Kejriwal

2
我在fork Github项目后遇到了同样的问题。我通过以下帖子解决了这个问题。
我的问题出现在我fork的Makefile中,我需要替换这些行。 原始答案: "最初的回答"
$(EXECUTABLE): $(OBJECTS)
        $(CC) $(LDFLAGS) $(OBJECTS) -o $@

newLine:

$(EXECUTABLE): $(OBJECTS)
        $(CC) $(OBJECTS) $(LDFLAGS) -o $@

最初的回答

希望能对某些人有所帮助 ;)


亲爱的先生,非常感谢您,您的答案刚刚拯救了我的一天。 - Meto

1

你可能缺少OpenCV库,尝试将它们添加到你的项目配置文件中,例如:

LIBS += -LC:\\opencv\\opeencv4.1\\x86\\mingw\\bin \
    libopencv_core410 \
    libopencv_highgui410 \
    libopencv_imgcodecs410 \
    libopencv_imgproc410 \
    libopencv_features2d410 \
    libopencv_video410 \
    libopencv_videoio410 \

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接