如何在 Xcode C++ 控制台应用程序中使用 dlib

How to use dlib in Xcode C++ console application

我已经使用 Homebrew 安装了 dlib。

brew install dlib

如何在 Xcode 中创建使用 dlib 的 C++ 项目?我尝试了一些构建设置。但是,它不起作用。

我遇到了这些错误:

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

clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

默认情况下,homebrew 安装没有任何 BLAS 库的 dlib。我通过将 Accelerate.framework 与二进制文件链接起来解决了这个问题。

Accelarate.framework 由 Apple 提供。它包括 dlib 需要的一切。更多的信息: https://developer.apple.com/reference/accelerate

为了将该库添加到您的项目中,

  1. 在项目导航器(左侧)中选择项目名称。
  2. 如果它没有出现在编辑器中,请单击 "Show project and targets list" 并选择目标二进制文件。

  3. 选择如下所示的"Build Phases"。
  4. 展开"Link Binary With Libraries"并单击添加项目图标。
  5. 搜索Accelerate.framework并添加。
  6. 将其状态更改为 "Required"。

或者,如果您卸载 dlib 并使用 brew install dlib --with-openblas 命令安装 dlib,它可能会起作用。但是,我还没有测试过。

顺便说一句,如果您 brew info openblas

,Homebrew 会警告 openblas

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

brew cask install xquartz
brew install gtk+3 boost
brew install dlib

那么你的设置就没问题了。我在使用时没有明确添加 Accelerate.framework