2017-02-17 1 views
1

Впервые я не могу скомпилировать мир привет. Я следил за тоннами учебников, как установить opencv. я просто следующий пример:Компиляция мира привет с opencv C++ на mac os x sierra

#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/местные/Cellar/opencv3 У меня есть 2 директории: 3.2.0 - вероятно, установлены бинарные файлы ГОЛОВОЙ 9053839 - составленный из источника

Теперь у меня есть opencv.pc файл, расположенный в/USR/местные/Библиотека/pkg-config:

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 

в приставке я также попытался ГОЛОВОЙ 9053839.

Я создал еще проще пример:

#include <opencv2/opencv.hpp> 
int main(){return 0; } 

Это все еще говорил мне, что файл 'opencv2/opencv.hpp' не найден. Тогда я напечатал, что PKG-конфигурации говорит: PKG-конфигурации --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++ -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 

Тогда я должен был удалить -l перед display_image.cpp, но потом у меня есть еще одна ошибка:

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 

Это ад.

+0

Я обычно всегда ставлю '-I directives' перед определением исходного файла, я всегда думал, порядок имеет смысл, вы могли бы попробовать? –

+0

Тот же результат. – Makalele

+0

Вы использовали 'opencv2' как refix в своих включении ... Удалите его. –

ответ

2

не имеют среды компиляции, чтобы регенерировать свою ошибку, но я думаю, что проблема об этих строк в коде:

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 

поскольку каталог OpenCV ищется из

/usr/local/Cellar/opencv3/3.2.0/include/opencv2 

, поскольку подразумевается ваш «pkg-config -cflags -libs opencv». Таким образом, я полагаю, изменения включают в себя линии в

#include <core/core.hpp> 
#include <highgui/highgui.hpp> 

поможет, или вы можете неявно объявить каталог, который вы хотите найти, как это:

g++ -I/usr/local/Cellar/opencv3/3.2.0/include display_image.cpp ... 
+0

Учитывая, что подавляющее большинство кода OpenCV содержит в форме '#include ' , это выглядит как проблема с 'pkg-config'. Таким образом, я предпочел бы ваш второй подход (или даже лучше, выяснить, что происходит с 'pkg-config' и исправить это). –

+0

В файле, включенном из display_image.cpp: 2: /usr/local/Cellar/opencv3/3.2.0/include/opencv2/core/core.hpp:48:10: фатальная ошибка: 'opencv2/core.hpp' файл не найден – Makalele

+0

Ну, похоже, что что-то не так с вашим pkg-config. Включить утверждения не сложно, как вы думаете. Попробуйте найти библиотеку с помощью терминала и проверьте, действительно ли у вас есть core.hpp. Если нет, вы должны проверить свою установку opencv. Если у вас есть правильные библиотеки, значит, вы не говорите компилятору правильно, где проверить. –

1

В OpenCV 3.x, то расположение файлов заголовков изменился, и теперь вы в значительной степени просто использовать:

#include <opencv2/opencv.hpp> 

Таким образом, в конкретных условиях, я предлагаю вам заменить 2-й и 3-й линии с вышеупомянутым заклинанием.

См. OpenCV Transition Guide.

+0

По-прежнему такая же ошибка. – Makalele

0

Ответ Сонера должен решить проблему ОП. Я хочу добавить некоторые другие решения.

Если вы используете CMake для установки openCV из источника, он поместит библиотеки OpenCV в /usr/local/lib и заголовки OpenCV в /usr/local/include. Если заголовки все входят в подпапку /usr/local/include/opencv. Поскольку они являются библиотеками по умолчанию и заголовками для большинства IDE, все примеры, которые вы найдете, будут работать с этим конфигом.

Теперь brew не устанавливает OpenCV в вышеуказанные папки, как вы уже знали. Так у вас есть три варианта: пути поиска

  1. Изменить компилятора для OpenCV библиотеки и заголовки: g++ -I/usr/local/Cellar/opencv3/3.2.0/include -L/usr/local/Cellar/opencv3/3.2.0/lib

  2. Мягкая ссылка /usr/local/Cellar/opencv3/3.2.0/include/opencv в /usr/local/include и /usr/local/Cellar/opencv3/3.2.0/lib в /usr/local/lib

  3. Установка OpenCV от источника с CMake.

0

Я сделал это! Это была проблема с pkg-config. В /usr/local/Cellar/opencv3/3.2.0/lib/pkgconfig я нашел opencv.pc, который выглядит следующим образом:

# Package Information for pkg-config 

prefix=/usr/local/Cellar/opencv3/3.2.0 
exec_prefix=${prefix} 
libdir=${exec_prefix}/lib 
includedir_old=${prefix}/include/opencv 
includedir_new=${prefix}/include 

Name: OpenCV 
Description: Open Source Computer Vision Library 
Version: 3.2.0 
Libs: -L${exec_prefix}/lib -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core 
Libs.private: -framework OpenCL -L/usr/local/opt/jpeg/lib -ljpeg -L/usr/local/lib -lpng -ltiff -lImath -lIlmImf -lIex -lHalf -lIlmThread -L/usr/lib -lz -framework Cocoa -framework AVFoundation -framework CoreGraphics -framework CoreMedia -framework CoreVideo -framework QuartzCore -framework Accelerate 
Cflags: -I${includedir_old} -I${includedir_new} 

Я заменил старый opencv.pc, расположенный в: /usr/local/lib/pkgconfig Теперь я не получаю никаких ошибок.

Я также должен был использовать различные включаемый файл:

#include <opencv2/opencv.hpp> 
+0

После этого у меня остались ошибки. Мне нужно было выполнить ответ Марка Сетчелла из https://stackoverflow.com/questions/24985713/opencv-undefined-symbols-for-architecture-x86-64-error – user391339

+0

brew install pkg-config. затем заваривать переустановку opencv. то pkg-config --cflags -libs opencv, чтобы посмотреть, что там. затем g ++ @ pkg-config --cflags --libs opencv @ display_image.cpp -o display_image (обратите внимание на замену @ w/back ticks слева вверху клавиатуры). – user391339

+0

после #include opencv2/opencv.hpp, указанной выше установки pkg-config, переустановки opencv и правильной загрузки библиотек с помощью pkg-config, я был успешным. – user391339

Смежные вопросы