VS2017+cmake编译dlib库

Dlib介绍

Dlib是一个机器学习的开源库,包含了机器学习的很多算法,使用起来很方便,直接包含头文件即可,并且不依赖于其他库(自带图像编解码库源码)。Dlib可以帮助您创建很多复杂的机器学习方面的软件来帮助解决实际问题。目前Dlib已经被广泛的用在行业和学术领域,包括机器人,嵌入式设备,移动电话和大型高性能计算环境。

Dlib是一个使用现代C++技术编写的跨平台的通用库,遵守Boost Software licence(Boost软件许可证). 主要特点如下:
● 完善的文档:每个类每个函数都有详细的文档,并且提供了大量的示例代码,如果你发现文档描述不清晰或者没有文档,告诉作者,作者会立刻添加。
● 可移植代码:代码符合ISO C++标准,不需要第三方库支持,支持win32、Linux、Mac OS X、Solaris、HPUX、BSDs 和 POSIX 系统 。
● 线程支持:提供简单的可移植的线程API 。
● 网络支持:提供简单的可移植的Socket API和一个简单的Http服务器 。
● 图形用户界面:提供线程安全的GUI API 。
● 数值算法:矩阵、大整数、随机数运算等 。
● 机器学习算法
● 图形模型算法
● 图像处理:支持读写Windows BMP文件,不同类型色彩转换
● 数据压缩和完整性算法:CRC32、Md5、不同形式的PPM算法
● 测试:线程安全的日志类和模块化的单元测试框架以及各种测试assert支持
● 一般工具:XML解析、内存管理、类型安全的big/little endian转换、序列化支持和容器类

工具

安装前提:已经下载好vs2017并且配置好OpenCV

安装环境:
visual studio 2017

cmake 3.15.2, 下载地址:https://cmake.org/download/

Dlib源文件, 下载地址:https://github.com/davisking/dlib
(附:dlib各版本下载地址:https://pypi.org/simple/dlib/)

配置过程

1.首先从其官网下载其文件包(包含大致几个文件夹:dlib,docs,examples,python_examples,tools)。

2.我们要对dlib进行makefile,将其制作成lib文件,需要用到一个工具叫做cmake(基于windows的)。

3.下载好cmak进行安装后,运行,开始制作dlib的静态库

第一步生成lib文件

1、打开cmake-gui,在第一个框中选择源码的位置,在第二个框中选择cmake生成文件的保存位置。由于dlib的源码都在dlib文件夹下,所以直接选择dlib文件夹。cmake的生成文件一般保存在一个新建的build文件夹中。
VS2017+cmake编译dlib库_第1张图片
2、单击Configure,在弹出的对话框中选择自己的vs版本和生成的平台,然后点击Finish。
VS2017+cmake编译dlib库_第2张图片
3、点击Finish后会出现下面的界面,这里是一些编译时的选项。使用dlib进行人脸识别需要JPG和PNG的支持,所以这里DLIB_JPEG_SUPPORT和DLIB_PNG_SUPPORT是默认勾选的,但是这里有一个坑,在下面安装遇到的问题部分会讲,如果电脑上之前安装了anaconda建议先看下面的问题三。此外,为了提高速度,官网上还建议勾选AVX指令集和SSE4指令集。勾选后再点击一下Configure进行更新,之后点击Generate进行生成。
VS2017+cmake编译dlib库_第3张图片
4、生成结束后可以看到在build文件夹下产生一堆文件。双击build下的dlib.sln或者点击cmake界面中的open Project打开生成的项目。

5、打开项目后,根据自己的需要选择Debug和Release,选择x64,如下图。
在这里插入图片描述
6、然后在解决方案资源管理器中右击dlib进行生成,生成结果如下。此时,在\build\Release文件夹下会生成一个lib文件,这个文件就是我们需要的。
VS2017+cmake编译dlib库_第4张图片
7、新建一个Dlib文件,将dlib文件夹下的源码和生成的lib文件整合在Dlib文件夹下,以便后续使用
在这里插入图片描述

第二步、配置环境

1、在vs2017中新建一个工程,并把examples中的例子复制进去,这里我复制的是face_landmark_detection_ex.cpp,该文件的作用是检测人脸上的关键点

2、打开属性管理器视图,右击红框,在属性中分别做以下修改:

在vc++目录——包含目录中选择dlib的头文件的路径,即dlib文件夹的路径。这里要注意的是不能直接在包含目录中添加dlib目录的路径,要添加dlib目录上一级的路径,否则会出错。
在vc++目录——库目录中添加lib文件的路径。
在连接器——输入——附加依赖项中输入lib文件的名字“dlib19.17.99_release_64bit_msvc1916.lib”
VS2017+cmake编译dlib库_第5张图片

VS2017+cmake编译dlib库_第6张图片
VS2017+cmake编译dlib库_第7张图片
3、设置完成后,稍微对代码进行一下修改(修改相关路径),然后编译,运行。

遇到问题以及解决办法

问题一

在对示例程序进行编译的时候出现下面的错误:“error LNK2001: 无法解析的外部符号 USER_ERROR__inconsistent_build_configuration__see_dlib_faq_2”

解决办法

这是因为config.h文件的问题,在cmake时,会根据cmake设置的选项修改config.h文件,所以用build文件夹下的config.h文件替换dlib中的config.h文件即可。

问题二

对示例程序进行编译时出现一堆未定义标识符的错误,其中有一条是“#error “Don’t put the dlib folder in your include path”

解决方法

这是包含目录设置的问题。包含目录是头文件所在的路径,但是在Dlib中,包含目录不能直接包含dlib头文件所在的目录,需要向上一级,否则会出现dlib中的文件与标准库中的文件混淆的问题。

问题三

在运行与图像相关的程序时提示需要添加预定义宏,有些博客里写的是添加DLIB_JPEG_SUPPORT和DLIB_PNG_SUPPORT的宏。其实在cmake后,build文件夹下的config.h文件中已经添加了这类的宏定义,只需要按照问题一中的方法替换config.h文件即可。

参考文章链接:
原文链接:https://blog.csdn.net/sihaiyinan/article/details/100055525
原文链接:https://blog.csdn.net/Roaddd/article/details/111826286

你可能感兴趣的:(c++,cmake)