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

Posted

技术标签:

【中文标题】如何在 Xcode C++ 控制台应用程序中使用 dlib【英文标题】:How to use dlib in Xcode C++ console application 【发布时间】:2017-02-09 23:52:46 【问题描述】:

我已经使用 Homebrew 安装了 dlib。

brew install dlib

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

/usr/local/Cellar/dlib/19.1_2/include 添加到标题搜索路径/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

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

【问题讨论】:

你试过从源代码编译它吗? @Evgeniy 是的,我试过了。我得到了同样的结果。我发现 dlib 在编译我的程序时试图访问 BLAS。它在 macOS 上的 Accelerate.framework 中提供。将该框架添加到项目后,问题已解决。 我遇到了同样的问题。不过,我正在尝试使用 cmake 通过命令行进行编译。你不会知道如何将它添加到 cmake 文件中吧? 首先,你需要找出Accelerate.framework在哪里。然后,您可以将其添加到 cmake 文件中。但是,我不知道如何添加它。我对cmake不太熟悉。或者,您可以使用 OpenBLAS 库。但是,我从未尝试过。 @fivetech 那么,你解决了这个问题吗?如果是的话,你能写个小指南吗? 【参考方案1】:

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

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

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

    在项目导航器(左侧)中选择项目名称。

    如果没有出现在编辑器上,点击“显示项目和目标列表”并选择目标二进制文件。

    选择如下所示的“构建阶段”。 展开“Link Binary With Libraries”并点击添加项目图标。 搜索 Accelerate.framework 并添加它。 将其状态更改为“必需”。

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

顺便说一句,如果你 brew info openblas,Homebrew 会警告有关 openblas:

macOS 已提供此软件并在 并行会引起各种麻烦。

【讨论】:

【参考方案2】:
brew cask install xquartz
brew install gtk+3 boost
brew install dlib

那么您的设置就可以了。我在使用时没有明确添加Accelerate.framework

【讨论】:

以上是关于如何在 Xcode C++ 控制台应用程序中使用 dlib的主要内容,如果未能解决你的问题,请参考以下文章

在 Xcode 控制台项目中创建和使用 C++ 库

Xcode 非终端 C++ 项目

学习在 Xcode 中编译 C++

如何在 Xcode 4 中运行 C++ 程序?

如何使用 xcode 制作简单的 OpenGl C++ 程序

如何在 Xcode 4.6 中使用 googletest 实现 c++ 单元测试?