基于windows系统中visualstudio2017的dlib库详细配置安装流程

皇家大鹏鹏 皇家大鹏鹏     2022-09-29     556

关键词:

dlib库是一个非常强大的开源库,有详细的说明文档和c++代码,也提供了一些和python的接口,但是安装和配置的过程略有些麻烦,网上有一些相关教程,但是大都零零星星不全面。笔者亲自把所有的坑都踩了一遍,整理出了比较全面的教程,供大家参考

1、        下载安装包

先在dlib网站上下载最新的库文件http://dlib.net/,左边的一列是菜单栏,包括了dlib的使用场景、编译换几个、python接口等各种详细说明,可以看出该库的应用场景包括API打包、图像处理、线性代数、机器学习、网络编程等几个大场景,每个场景之下又有小的分类,不禁感叹dlib库 的强大。

 

我下载的是dlib-19.7,将文件解压,将解压后的文件夹放置与任意文件夹下,路径中不要包含中文

2、        建立控制台工程

打开visual studio 2017(其他版本的配置过程类似),建立控制台工程。这时如果直接将example中的代码直接拷贝进去,就会报各种错误,首先错误就是无法进入找到dlib库文件中的各种头文件

 

 

3、        包含dlib对应文件夹

我们需要在项目属性中添加上刚才解压好的lib路径,注意添加的是dlib-19.7而不是dlib-19.7/dlib,因为前者包含了除dlib库之外的很多内容,为避免以后麻烦,这里直接包含dlib-19.7

右侧解决方案资源管理器,在项目上右击鼠标->属性->VC++目录,包含目录、引用目录、库目录均添加上dlib-19.7文件夹路径,点击确认

 

 

4、        添加dlib.lib

这时可以发现之前红红色波浪线的错误都已经不在了,但是进行编译时,会出现如下的错误,

 

大概读一下错误内容以及错误类型,可以判断是因为缺少dlib.lib文件导致的。下面需要制作dlib.lib,当然网上也有,但是不一定时最新的dlib,建议自己制作,也不麻烦

5、        制作dlib.lib

我们需要利用Cmake软件,cmake是一个跨平台编译工具,能够方便地制作库文件,进入官网(https://cmake.org/download/)下载,下载与操作系统位数匹配 的版本

 

下载完成之后,开始安装,如图所示,第一行时dlib-19.7文件夹中的dlib文件夹,dlib_building2是一个空的文件夹 ,用于存放制作完成之后的文件

 

点击generate,选择对应的vs版本号,点击finish,库文件制作开始

 

当出现如下字样时,制作完成

 

完成之后找到刚才的dlib_building2文件夹,用vs2017打开dlib.vcxproj

 

右击重新生成,

 

在刚才的文件夹共会出现debug文件夹,里面有需要的lib文件

进入原来的工程,右击进入属性页面,修改两个地方,在链接器下的常规选项卡中的的附加库目录中,加入之前生成的dubug路径。

 

在连接器的输入选项卡中的“附加依赖项目”中添加dlib.lib

 

6、        添加source以及修改stadfx属性

到这一步基本以及完成大部分,能够正常运行是最好不过的,但是如果出现如下错误

error LNK2001: 无法解析的外部符号 USER_ERROR__missing_dlib_all_source_cpp_file__OR__inconsistent_use_of_DEBUG_or_ENABLE_ASSERTS_preprocessor_directives

那就说明需要加入source.cpp文件,我们以添加现有项的方式加入,该文件位于 dlib-19.7文件夹下

 

这是笔者遇见了这样的错误:

 

这个错误看上去简单,但是当你在其中加入“stdafx.h”头文件时,还会有其他预编译的错误,执行起来麻烦,笔者经过查找各种资料,以及自己尝试,发现最简单的方法就是在source.cpp文件上右击,点“属性”,将预编译头设置改为不使用即可

 

如果遇见了这样的问题:

***dliballsource.cpp : fatal error C1128: 节数超过对象文件格式限制: 请使用 /bigobj 进行编译

则按照如下方式解决

 

7、成功运行

直接运行示例程序(http://dlib.net/gui_api_ex.cpp.html),可以得到这样的一个图形用户界面,可以看出这是一个用鼠标单击并且进行计数的一个程序,每次点击button,都会是的数字加一

 

 

7、        图形处理类配置

以上配置可以满足非图形处理的需要,但是如若你的程序中的算法需要处理图片,比如你想做人脸识别或则时物品检测,需要读取图片,那么请继续往下看

可能在编译时遇见这样的错误

You must #define DLIB_JPEG_SUPPORT and link to libjpeg to read JPEG files. 
Do this by following the instructions at 
http://dlib.net/compile.html.

Note that you must cause DLIB_JPEG_SUPPORT to be defined for your entire project. 
So don’t #define it in one file. Instead, add it to the C/C++->Preprocessor->Preprocessor Definitions 
field in Visual Studio’s Property Pages window so it takes effect for your entire application.

解决方法如下:

 

将注释中的表示的缺少项加进去即可

如果报如下错误:

dlibdlib-19.4dlibimage_loaderjpeg_loader.cpp(17): fatal error C1083: 无法打开包括文件: “jpeglib.h”: No such file or directory

则需要按照上面的方法添加DLIB_JPEG_STATIC即可

什么是好的,基于windows和iis(http)的分布式版本控制系统[关闭]

】什么是好的,基于windows和iis(http)的分布式版本控制系统[关闭]【英文标题】:Whatwouldbeagood,windowsandiis(http)baseddistributedversioncontrolsystem[closed]【发布时间】:2010-09-0623:46:46【问题描述】:在我的工作中,我们制作和销售网站。... 查看详情

如何在基于 C# 的复杂 Windows 服务中找到内存使用率高的原因?

】如何在基于C#的复杂Windows服务中找到内存使用率高的原因?【英文标题】:HowtofindcauseofhighmemoryusageinacomplexC#basedWindowsservice?【发布时间】:2022-01-1423:13:32【问题描述】:我在找出复杂的基于C#的Windows服务中的内存问题的根源时... 查看详情

一步步部署基于windows系统的jenkins持续集成环境

...Jenkins时,确实遇到了一些问题,而大多数教程文档都是基于Mac或是Linux平台。为此很是头疼,经过一番摸索,终于走通了Windows平台下的一条路。本CI系统流程:Dev提交代码,并merge到master分支-->Jenkns获取最新代码,开始构建(... 查看详情

将基于 Windows 的安装程序扩展到其他操作系统

】将基于Windows的安装程序扩展到其他操作系统【英文标题】:ExtendingwindowsbasedinstallertootherOperatingSystems【发布时间】:2010-03-1909:15:19【问题描述】:我已经使用NSIS构建了一个安装程序。现在我想通过WINE将它扩展到Solaris和Linux。... 查看详情

如何在windows中为多个请求/作业生成基于php的web应用程序的队列系统?

...外,还需要电子邮件支持来按其ID检索作业。什么可能是基于Windows的PHP应用程序的现有工具?如果没有,如何使用mysql和php手动实现这个?很少有人发现这种情况,例如here但实际上并没有从哪里开始。答案如果我 查看详情

在windows+server2016基本磁盘类型中,gpt磁盘最多可以创建几个主分区?

...微软为POSIX子系统提供了众多的UNIX工具,而这些工具都是基于POSIX子系统直接使用GNU的原生代码编译实现的,你也可以在这个POSIX子系统运行CShell、KornShell等命令行Shell。不过Windows7以后的操作系统中都默认移除了POSIX子系统。如果有... 查看详情

系统在此应用程序中检测到基于堆栈的缓冲区溢出。溢出...

...件→系统工具→系统还原”。系统在此应用程序中检测到基于堆栈的缓冲区溢出。溢出可能允许恶意用户获得此应用程序的控制。遇到此问题的用户,可参照以下的方法进行解决。最近有用户反馈,一键u盘装windows10系统后,电... 查看详情

如何准备代码库以在基于 Windows 和 Unix 的系统上进行编译

】如何准备代码库以在基于Windows和Unix的系统上进行编译【英文标题】:HowtoprepareacodebaseforcompilingonbothWindowsandUnix-basedsystems【发布时间】:2011-02-0715:13:31【问题描述】:我想知道有哪些不同的解决方案可以轻松地为windows和unix编... 查看详情

easyuefi只能在基于efi启动的windows操作系统上安装是怎么解决

...时候,继续确定GUID的分区设置。4、如果没问题,就得到基于efi启动的windows操作系统。5、直接打开EasyUEFI的相关窗口,点击添加新项目。6、等完成上述操作以后,根据实际情况选择所浏览的文件并确定安装。7、这样一来会发现... 查看详情

实践六windows操作系统安全攻防

...践六报告1.实践内容(1)Windows的安全机制Windows操作系统基于引用监控器模型来实现基本的对象安全模型,引用监控器模型即系统中所有主体对客体的访问都通过引用监控器作为中介,由引用监控器根据安全访问控制策略来进行... 查看详情

cmd是啥

...程序为cmd.exe,是一个32位的命令行程序,微软Windows系统基于Windows上的命令解释程序,类似于微软的DOS操作系统。禁止使用在Windows系统中,出于安全性考虑可以禁止使用命令提示符。以WindowsXP系统为例介绍操作方法:打开“组策... 查看详情

基于signalr实现b/s系统对windows服务运行状态的监测

通常来讲一个BS项目肯定不止单独的一个BS应用,可能涉及到很多后台服务来支持BS的运行,特别是针对耗时较长的某些任务来说,Windows服务肯定是必不可少的,我们还需要利用B/S与windows服务进行交互,来实现更好的用户体验,... 查看详情

使用 Windows Azure 的基于消息的体系结构

】使用WindowsAzure的基于消息的体系结构【英文标题】:Messages-BasedarchitecturewithWindowsAzure【发布时间】:2011-11-1012:50:09【问题描述】:我正在WindowsAzure上制作基于Web的系统,它处理来自不同来源的订单-网站或Web服务。我脑海中出... 查看详情

windows钩子的使用(代码片段)

我们知道Windows中的窗口程序是基于消息,由事件驱动的,在某些情况下可能需要捕获或者修改消息,从而完成一些特殊的功能(MFC框架就利用Windows钩子对消息进行引导)。对于捕获消息而言,无法使用IAT... 查看详情

scrapy框架安装与使用(基于windows系统)(代码片段)

...些问题,在这里记录一下,免得忘记。  Scrapy的安装是基于Twisted进行安装的,在Python3.8的环境中,并不像是网上许多教程所说的那样需要安装许多的插件,只需要安装好Twisted就够了。所以,为了确保一次安装成功,我们首先... 查看详情

2022适用于windows11的11累积更新,适合基于x64的系统(kb5019961)建议更新?

参考技术A不建议升级。微软确认Nv显卡补丁冲突。速度降成Ppt卸载重装系统。换Win1122000.194版本顺aquiteamo。 查看详情

Xcode 4.2 中基于 Windows 的应用程序发生了啥? [复制]

】Xcode4.2中基于Windows的应用程序发生了啥?[复制]【英文标题】:WhathappenedtoWindowsBasedApplicationinXcode4.2?[duplicate]Xcode4.2中基于Windows的应用程序发生了什么?[复制]【发布时间】:2011-12-0814:55:42【问题描述】:可能重复:Cannotfindwindo... 查看详情

windows系统中搭建go语言开发环境详解(代码片段)

...4.1、gomodule4.2、gopm5、编写Go语言代码的IDE或编辑工具5.1、基于VSCode的Go开发环境5.2、GoLand5.3、Vim5.4、其他Go代码编写工具6、Go语言学习资料分享     本文详细讲述 查看详情