2016-10-01 4 views
3

Я установил dlib с помощью Homebrew.Как использовать dlib в консольном приложении Xcode C++

brew install dlib 

Как создать проект на C++, который использует dlib в Xcode? Я пробовал некоторые настройки сборки. Однако это не работает.

  • Добавить /usr/local/Cellar/dlib/19.1_2/include в Header Search Paths
  • Добавить /usr/local/Cellar/dlib/19.1_2/lib в Библиотека Пути поиска
  • Добавить -ldlib в Другие флаги компоновщика

Я получил эти ошибки:

Undefined symbols for architecture x86_64: 
"_cblas_dgemm", referenced from: 
    dlib::blas_bindings::cblas_gemm(dlib::blas_bindings::CBLAS_ORDER, dlib::blas_bindings::CBLAS_TRANSPOSE, dlib::blas_bindings::CBLAS_TRANSPOSE, int, int, int, double, double const*, int, double const*, int, double, double*, int) in main.o 
"_cblas_saxpy", referenced from: 
    dlib::blas_bindings::cblas_axpy(int, float, float const*, int, float*, int) in main.o 
"_cblas_sscal", referenced from: 
    dlib::blas_bindings::cblas_scal(int, float, float*) in main.o 
"_dgesvd_", referenced from: 
    dlib::lapack::binding::gesvd(char, char, int, int, double*, int, double*, double*, int, double*, int, double*, int) in main.o 
ld: symbol(s) not found for architecture x86_64 

лязг: ошибка: команда линкер потерпела неудачу с кодом выхода 1 (используйте опцию -v, чтобы вызов)

+0

ты пытался компилировать его из исходного кода? – Evgeniy

+0

@Evgeniy Да, я пробовал. Я получил тот же результат. Я обнаружил, что dlib пытается получить доступ к BLAS при компиляции моей программы. Он предоставляется в Accelerate.framework на macOS.После добавления этой структуры для проекта проблема решена. – fivetech

+0

У меня такая же проблема. Тем не менее, я пытаюсь выполнить компиляцию через командную строку с cmake. Вы не знаете, как добавить это в файлы cmake, не так ли? –

ответ

3

По умолчанию доморощенного устанавливает dlib без какой-либо библиотеки BLAS. Я решил проблему, связав Accelerate.framework с двоичным файлом.

Accelarate.framework предоставляется Apple. Он включает в себя все, что требует dlib. Дополнительная информация: https://developer.apple.com/reference/accelerate

Для того, чтобы добавить эту библиотеку в проект,

  1. Выберите имя проекта в проекте штурмана (левая сторона).
  2. Если он не указан в редакторе, нажмите «Показать список проектов и целей» и выберите целевой бинарный файл.

    enter image description here

  3. Выберите "Build Phases", как показано ниже. enter image description here
  4. Развернуть "Link Binary With Libraries" и нажмите значок добавить иконку.
  5. Поиск Accelerate.framework и добавьте его.
  6. Изменить статус "Обязательно".

В качестве альтернативы, он может работать, если вы удалите dlib и установить dlib с brew install dlib --with-openblas командой. Тем не менее, я еще не тестировал его.

Кстати, Homebrew предупреждает о openblas если вы brew info openblas:

macOS already provides this software and installing another version in parallel can cause all kinds of trouble.