c++ - 使用 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 多行代码的感受。非常感谢!
解决方案
您在链接到 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。
此致!
推荐阅读
- mysql - mysql:具有授予选项和通配符的数据库特定用户权限委托
- angular - Angular,在同一模板的另一个地方使用模板变量不起作用
- java - Java - 使用地址对象更新用户对象的两个复杂字段(办公室地址和家庭地址)
- gradle - 如何在 gradle cucumber-jvm 中使用钩子
- css-animations - HTML5 CSS3 Javascript
- vue.js - 如何在 vue.js 中元素属性的函数中应用样式
- rubymine - Rubymine 在路径中查找:排除特定的文件名模式?
- excel - 从 Excel 2016 (OSX) 将 /usr/local/bin 添加到 $PATH 调用 popen
- java - BaseAdapter 和 Fragment 之间的通信
- reactjs - 如何使用 Webpack 仅用于转译而不是用于捆绑