我正在尝试运行一个简单的 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/