Undefined символы для архитектуры x86_64 ошибка при связывании OpenCV в Xcode

У меня проблема, связанная с OpenCV в Xcode. Я установил OpenCV с помощью brew:

brew tap homebrew/science
sudo brew install opencv

Я запустил новый проект командной строки Xcode, добавленный /usr/local/lib и /usr/local/include в библиотеку и путь поиска заголовка. Я также добавил вывод pkg-config --libs opencv в other linker options.

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

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

int main(int argc, char *argv[])
{
    cv::Mat test;
    cv::namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
    cv::waitKey(0);                                          // Wait for a keystroke in the window
    return 0;
} 

Я получаю следующую ошибку компоновщика:

Undefined symbols for architecture x86_64:
  "cv::namedWindow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from:
      _main in main.o
ld: symbol(s) not found for architecture x86_64

Но я могу скомпилировать программу в командной строке, используя

g++ `pkg-config --cflags --libs opencv` prog.cpp

Итак, я думаю, проблема в том, как настроен Xcode. Но я не могу определить, что точно отличается от способа компиляции Xcode и моего аргумента командной строки.

Кто-нибудь знает причину этой ошибки или имеет представление о том, что я мог бы попытаться исследовать проблему?

Ответ 1

В Xcode создайте новую группу внутри вашего проекта, щелкните ее правой кнопкой мыши, выберите Добавить файлы в проект, перейдите в папку /usr/local/lib и добавьте следующие базовые библиотеки:

libopencv_core.dylib, libopencv_ml.dylib, libopencv_video.dylib

В предыдущих версиях OpenCV имена библиотек могли быть:

libcxcore.dylib, libcvaux.dylib, libcv.dylib, libhighgui.dylib, libml.dylib

(Библиотеки могут находиться по другому пути в зависимости от метода, который вы использовали для установки OpenCV на вашем Mac.)

Edit:

Вышеуказанные строки не должны быть необходимы, если вы включаете динамические библиотеки на этапе связывания, как объясняет OP.

Выберите свой проект, перейдите на вкладку Настройки сборки, фильтруйте стандартную библиотеку С++ и установите этот параметр в libstdС++ (стандартная библиотека GNU С++).

Ответ 2

Я установил стандартную библиотеку Build Settings → С++ для Компилятора по умолчанию. Ошибки исчезли.

Ответ 4

Для меня я использую opencv в xcode для iOS, и я решаю ошибки, используя opencv через pod install, а не в автономную opencv framework.

Вы можете попробовать, добавив текст opencv pod ниже:

pod 'OpenCV', '2.4.9'