首页 > 解决方案 > 使用 G++ 尝试使用 openCV 进行编译后 G++ 返回错误

问题描述

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

到目前为止,我已经尝试将 Mat 定义全部删除,只包含 openCV 文件,这很有效!我是命令行新手,所以我不确定这是否与我使用 g++ 的方式有关。然而,我在 Xcode 中的 openCV 上做了很多工作(尽管使用 Xcode,没有必要在命令行中工作,因为一切都是在运行时为您精心构建的)。

另外,这是我第一次在 Stack Overflow 上发帖,所以我可能在格式上犯了错误。

这是我正在尝试编译的 main.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 多行代码的感受。非常感谢!

标签: c++opencvcompiler-errorscomputer-visiong++

解决方案


您在链接到 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 将为您准备包含所有需要的依赖项的 makefile。

此致!


推荐阅读