在 OS X 上编译 dlib

Compiling dlib on OS X

我尝试在 OS X 上的 Qt 项目中使用 dlib。因此,在这次尝试中我做了以下操作:

在 dlib 根目录中:

cd examples
mkdir build
cd build
cmake ..
cmake --build . --config Release

在 dlib 根目录中:

mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/Users/user/dlib_build
cmake --build . --config Release --target install

.pro 文件:

INCLUDEPATH += /Users/user/dlib_build/include
LIBS += -L/Users/user/dlib_build/lib
LIBS += -ldlib

main.cpp:

//...
frontal_face_detector detector = get_frontal_face_detector();
//...

编译输出:

Undefined symbols for architecture x86_64:
"_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

如何解决这个问题并在 OS X 上将 dlib 与 Qt 一起使用?

正确的解决方案是添加缺少的库以进行链接。构建 Dlib 时 - 它找到了一些 BLAS 库并启用了 BLAS 支持。 要找到这个库 - 查看位于 dlib 的 pkgconfig 文件 /Users/user/dlib_build/lib/pkgconfig,它会有类似 "Libs: -L${libdir} -ldlib" 的行 Qt 不会自动管理此类依赖项,因此您应该手动添加 blas 库

另一个(简单的)解决方案是在没有 BLAS/LAPACK 支持的情况下构建 dlib: 在 dlib 根目录中:

mkdir build
cd build
cmake .. -DDLIB_USE_BLAS=OFF -DDLIB_USE_LAPACK=OFF -DCMAKE_INSTALL_PREFIX=/Users/user/dlib_build
cmake --build . --config Release --target install

添加框架加速即可

如果你使用cmake,添加:

target_link_libraries(your_app "-framework accelerate")

如果使用xcode,直接加accelerate。