📜  未定义对 `cv::VideoCapture::VideoCapture(cv::String const&)' 的引用 - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:26:31.391000             🧑  作者: Mango

介绍

在 C 编程语言中,当我们在使用 OpenCV 库的 VideoCapture 类时,可能会遇到类似于“未定义对 `cv::VideoCapture::VideoCapture(cv::String const&)' 的引用”的错误。这种错误的出现通常是由于缺少所需的库文件或链接库文件的错误。在本文中,我们将探讨如何修复此错误。

错误信息

当我们在使用 VideoCapture 类时,运行程序时可能会收到以下错误信息:

undefined reference to `cv::VideoCapture::VideoCapture(cv::String const&)'
原因分析

出现上述错误的原因通常是由于链接器(linker)无法找到所需的库文件或链接库文件的错误。

在使用 VideoCapture 时,我们需要链接以下库文件:

  • opencv_core
  • opencv_highgui
  • opencv_videoio

如果缺少这些库文件,编译器将无法将程序正确链接到这些库文件,并因此产生未定义引用错误。

解决方案

要解决此问题,我们需要在 C 代码中添加以下链接参数:

-L/path/to/opencv/libraries -lopencv_core -lopencv_highgui -lopencv_videoio

其中,/path/to/opencv/libraries 指向 Opencv 库文件所在的路径。这三个链接选项将告诉链接器将 opencv_core、opencv_highgui 和 opencv_videoio 库链接到我们的程序中。

如果您使用的是 GNU Make 工具链,则可以将这些链接选项添加到 Makefile 中。以下是一个示例 Makefile,其中包括上述链接选项:

CC=gcc
CFLAGS=-I/path/to/opencv/include
LDFLAGS=-L/path/to/opencv/libraries -lopencv_core -lopencv_highgui -lopencv_videoio

all: program

program: main.o
        $(CC) $(LDFLAGS) $^ -o $@

main.o: main.c
        $(CC) $(CFLAGS) -c $< -o $@

clean:
        rm -f *.o program
结论

在使用 OpenCV 中的 VideoCapture 类时,遇到未定义引用错误时,通常是由于链接器无法找到所需的库文件或链接库文件的错误。为了解决此问题,我们需要在 C 代码中添加适当的链接选项,并确保这些库文件位于正确的位置。