如何将 OpenCV 库包含到 Raspberry Pi 上的项目中

问题描述

我在 RaspBerry Pi4 上安装了 OpenCV

sudo apt-get install libopencv-dev

现在我在 Qt 和 main.cpp 中打开一个项目

 #include "opencv2/opencv.hpp"
 //or - the same result
 //#include <opencv2/opencv.hpp>

Qt 会看到其中的目录和文件。但是当我编译时,我在 opencv 库文件中遇到了很多错误。为什么?可能我应该将它包含在 *.pro 文件中 - LIB+= ????? - 我应该包括什么?

我得到的错误

-1:错误:main.o:在函数cv::String::~String()': -1: error: main.o: in function cv::String::operator=(cv::String const&)'中 :/usr/include/opencv2/core/cvstd.hpp:672: 错误: 未定义对 `cv::String::deallocate()' 的引用 -1:错误:collect2:错误:ld 返回 1 个退出状态

解决方法

确保您的 make 文件具有正确的 CFLAGS 和 LDFLAGS。我推荐:

CFLAGS+=`pkg-config --cflags opencv`
LDFLAGS+=`pkg-config --libs opencv`

这是我做的一个快速测试:

test.cpp:

#include <opencv2/opencv.hpp>

int main() {}
nir@jamal:~ $ g++ test.cpp -o test
/usr/bin/ld: /tmp/ccriAyaZ.o: in function `cv::String::~String()':
test.cpp:(.text._ZN2cv6StringD2Ev[_ZN2cv6StringD5Ev]+0x14): undefined reference to `cv::String::deallocate()'
/usr/bin/ld: /tmp/ccriAyaZ.o: in function `cv::String::operator=(cv::String const&)':
test.cpp:(.text._ZN2cv6StringaSERKS0_[_ZN2cv6StringaSERKS0_]+0x30): undefined reference to `cv::String::deallocate()'
collect2: error: ld returned 1 exit status

nir@jamal:~ $ g++ test.cpp -o test `pkg-config --libs opencv`
nir@jamal:~ $ 

通过使用 pkg-config --libs opencv 向链接器添加正确的库,我能够消除错误。

注意: 使用 #include <opencv2/opencv.hpp> 而不是 #include "opencv2/opencv.hpp"<> 而不是 ""),因为 sudo apt-get install libopencv-dev 为系统安装头文件,而不是在您的本地目录中 - 即使使用 { {1}} 搜索系统文件,以防本地文件“opencv2/opencv.hpp”不存在,最好确保包含系统安装版本。