G++ 在尝试使用 G++ 使用 openCV 进行编译后返回错误

G++ returning errors after attempted compilation with openCV using G++

本文关键字:G++ 编译 错误 返回 使用 openCV      更新时间:2023-10-16

我正在尝试运行一个简单的c ++文件,其中包含openCV库并创建一个简单的Mat。 不幸的是,当我尝试使用g ++编译文件时,它返回了许多错误。

到目前为止,我已经尝试一起删除 Mat 定义,只包含 openCV 文件,这奏效了!我是命令行的新手,所以我不确定这是否是我使用 g++ 的方式的问题。但是,我在 Xcode 中的 openCV 上做了很多工作(尽管使用 Xcode,无需在命令行中工作,因为一切都在运行时为您整齐地构建(。

另外,这是我第一次发布到堆栈溢出,所以我可能犯了一个错误的格式。

这是我正在尝试编译的主要.cpp文件。正如我之前提到的,如果我删除"Mat test;"行,它会成功编译并按预期写入控制台。

#include <iostream>
#include <string>
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/videoio.hpp>

using namespace std;
using namespace cv;
int main() {
Mat test;
cout << "Mat Defined!" << endl;
return(0);
}

这是我正在使用的 g++ 命令:

g++ -o main.out main.cpp

这是我尝试运行它时遇到的错误:

/usr/bin/ld: /tmp/ccbbhoNd.o: in function `cv::Mat::~Mat()':
main.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x3c): undefined reference to `cv::fastFree(void*)'
/usr/bin/ld: /tmp/ccbbhoNd.o: in function `cv::Mat::release()':
main.cpp:(.text._ZN2cv3Mat7releaseEv[_ZN2cv3Mat7releaseEv]+0x68): undefined reference to `cv::Mat::deallocate()'
collect2: error: ld returned 1 exit status

任何帮助将不胜感激。我也选择退出 g++ 的详细标志,因为它返回了大量行,我不确定人们对 50+ 行代码的感觉。非常感谢!

您在链接到 OpenCV 库时遇到问题。您需要将 ld 程序信息传递给在哪里可以找到所有必要的库。在您的情况下,它将是:

g++ -I/usr/local/include/opencv -I/usr/local/include/opencv2 -L/usr/local/lib/ -o main.out  main.cpp -lopencv_core

所有 OpenCV 链接器标志都是:

-lopencv_calib3d
-lopencv_contrib
-lopencv_core
-lopencv_features2d
-lopencv_flann
-lopencv_highgui
-lopencv_imgproc
-lopencv_legacy
-lopencv_ml
-lopencv_nonfree
-lopencv_objdetect
-lopencv_photo
-lopencv_stitching
-lopencv_superres
-lopencv_ts
-lopencv_video
-lopencv_videostab

毕竟,我建议为您的C++项目跳入CMake构建系统。使用OpenCV,编译程序要容易得多。签出文档。CMake 将为您准备包含所有必需依赖项的生成文件。

此致敬意!

它失败,因为您没有链接命令中的库。在编译期间,您的操作系统无法访问 opencv 库,因为您没有解决它们。您需要使用以下代码编译 cpp 文件:

g++ -std=c++11 main.cpp `pkg-config --libs --cflags opencv` -o output