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

标签 c++ opencv compiler-errors computer-vision 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 多行代码的感受。非常感谢!

最佳答案

您在链接到 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 编译程序要容易得多。结帐doc's . CMake 将为您准备包含所有需要的依赖项的 makefile。

最好的问候!

关于c++ - 尝试使用 G++ 使用 openCV 进行编译后 G++ 返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58388076/

相关文章:

python - 用于生成视频摘要的优化方法?

c++ - 改进open cv中的camshift算法

铿锵错误: unsupported: anonymous type given name for linkage purposes by typedef declaration after its linkage was computed

c - 试图在 c 中实现 ps 命令但出现奇怪的错误

c++ - std::set::equal_range 有什么用?

c++ - Profiler 显示没有时间进行跳跃,但有很多时间进行比较

java - OpenCV 应用程序 - Android 相机在 10 秒后崩溃

android - Android Studio 2.3 中的错误 com.android.dx.command.Main

c++ - Windows API 和字符串连接

c++ - 是否允许为自定义数字类型专门化数学常量?