【发布时间】:2017-02-17 14:46:01
【问题描述】:
我第一次无法编译 hello world。 我已经学习了大量如何安装 opencv 的教程。 我只有以下示例:
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat imageMe = imread("test.jpg", 0);
return 0;
}
来自 opencv 网站。 看起来很简单,但它不会编译。
g++ display_image.cpp `pkg-config --cflags --libs opencv` -l
这是错误:
display_image.cpp:2:10: fatal error: 'opencv2/core/core.hpp' file not found
#include <opencv2/core/core.hpp>
^
1 error generated.
并运行:
pkg-config --cflags --libs opencv
返回这个:
-I/usr/local/Cellar/opencv3/3.2.0/include/opencv -I/usr/local/Cellar/opencv3/3.2.0/include/opencv2 -L/usr/local/Cellar/opencv3/3.2.0/lib -lopencv_calib3d -lopencv_imgproc -lopencv_contrib -lopencv_legacy -l
这些文件存在。
正在运行ls /usr/local/Cellar/opencv3/3.2.0/include/opencv2/core | grep core.hpp
给出结果:
core.hpp
有什么问题?
编辑: 我一直在使用以下教程在我的机器上安装 opencv:
http://www.pyimagesearch.com/2016/12/19/install-opencv-3-on-macos-with-homebrew-the-easy-way/
https://www.learnopencv.com/install-opencv-3-on-yosemite-osx-10-10-x/
https://blogs.wcode.org/2014/10/howto-install-build-and-use-opencv-macosx-10-10/
http://seeb0h.github.io/howto/howto-install-homebrew-python-opencv-osx-el-capitan/
编辑:
即使得到所有这些答案,我也无法编译单个应用程序。即使它以某种方式可以找到直接包含在我的文件中的 .hpp 文件,它也无法在其中找到包含。
可能我的配置有误。 在 /usr/local/Cellar/opencv3 我有 2 个目录: 3.2.0 - 可能已安装的二进制文件 HEAD-9053839 - 从源代码编译
现在我在 /usr/local/lib/pkgconfig 中也有 opencv.pc 文件:
prefix=/usr/local/Cellar/opencv3/3.2.0
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/lib
Name: opencv
Description: The opencv library
Version: 2.x.x
Cflags: -I${includedir}/opencv -I${includedir}/opencv2
Libs: -L${libdir} -lopencv_calib3d -lopencv_imgproc -lopencv_contrib -lopencv_legacy -l
作为前缀,我也尝试过 HEAD-9053839。
我创建了更简单的示例:
#include <opencv2/opencv.hpp>
int main(){return 0; }
它仍然告诉我找不到“opencv2/opencv.hpp”文件。 然后我打印了 pkg-config 的内容: pkg-config --cflags --libs opencv
-I/usr/local/Cellar/opencv3/3.2.0/include/opencv -I/usr/local/Cellar/opencv3/3.2.0/include/opencv2 -L/usr/local/Cellar/opencv3/3.2.0/lib -lopencv_calib3d -lopencv_imgproc -lopencv_contrib -lopencv_legacy -l
发现它宁愿直接包含目录,而不是 opencv/opencv2 子目录。
所以我像这样运行 g++:
g++ -I/usr/local/Cellar/opencv3/3.2.0/include -L/usr/local/Cellar/opencv3/3.2.0/lib -lopencv_calib3d -lopencv_imgproc -lopencv_contrib -lopencv_legacy -l display_image.cpp
然后它告诉我:
ld: library not found for -lopencv_contrib
删除后它说:
ld: library not found for -lopencv_legacy
然后我不得不在 display_image.cpp 之前删除 -l,但是我又遇到了另一个错误:
Undefined symbols for architecture x86_64:
"cv::String::deallocate()", referenced from:
cv::String::~String() in display_image-9d8f86.o
cv::String::operator=(cv::String const&) in display_image-9d8f86.o
这是地狱。
【问题讨论】:
-
我一般都是在指定源文件前加上
-I directives,一直觉得顺序是有意义的,你可以试试吗? -
您在包含中使用了
opencv2作为refix...删除它。 -
在 OpenCV 3.x 中将第 2 行和第 3 行替换为
#include <opencv2/opencv.hpp>