visual studio和cmake如何编译dlib库

官网 dlib C++ Library  对应的是最新版本,只能用到vs2015版本及以后

如果使用vs2013,所以需要下载vs2013可用的版本。

就是说dlib版本与vs版本有对应关系

所有版本

dlib C++ Library - Browse /dlib at SourceForge.net

Releases · davisking/dlib · GitHub

下面以dlib19.0与vs2013为例,其他都一样。

使用19.0版本,可以在vs2013使用

Release v19.0 · davisking/dlib · GitHub

下载

visual studio和cmake如何编译dlib库_第1张图片

下载后源码位置

D:\lyp\Project\AI_Train\c_plus_opencv\learn_cv\CV\dlib_source\dlib-19.0

使用cmake将dlib转成vs2013项目

下载cmake-3.6.1

D:\lyp\Project\AI_Train\c_plus_opencv\learn_cv\CV\cmake-3.6.1-win64-x64\cmake-3.6.1-win64-x64

运行 cmake-gui.exe

显示source code,就是dlib源码位置

D:\lyp\Project\AI_Train\c_plus_opencv\learn_cv\CV\dlib_source\dlib-19.0\dlib

build the binaries

转换后的目录

在下面目录中建立一个build目录

D:\lyp\Project\AI_Train\c_plus_opencv\learn_cv\CV\dlib_source\dlib-19.0

设置到

D:\lyp\Project\AI_Train\c_plus_opencv\learn_cv\CV\dlib_source\dlib-19.0\build

visual studio和cmake如何编译dlib库_第2张图片

点击configure,选择 Visual Studio 12 2013 Win64,然后选择Genarate

visual studio和cmake如何编译dlib库_第3张图片

visual studio和cmake如何编译dlib库_第4张图片

选择后,点击finish,会进行导入第一生成,可能会有红色警告,告知无法找到cuda,可以不用管,再次点击generate生成

visual studio和cmake如何编译dlib库_第5张图片

此时在刚才建立的build目录中,会生成vs2013的dlib项目

运行dlib.sln

不管是opencv还是dlib,如果你的程序是debug版本,需要使用dlib或opencv的debug版本,如果你的程序是release版本,需要使用dlib或opencv的release版本。

下面先编译 dlib对应x64的debug版本,注意目前的所有程序都是基于x64,win32的已经逐步淘汰。

打开dlib.sln后,可以看到缺省设置的就是x64下的debug

visual studio和cmake如何编译dlib库_第6张图片

visual studio和cmake如何编译dlib库_第7张图片

右键选择ALL_BULID,然后rebuild

visual studio和cmake如何编译dlib库_第8张图片

显示全部build成功

visual studio和cmake如何编译dlib库_第9张图片

在build目录的debug目录中会生成基于x64的debug的dlib库

visual studio和cmake如何编译dlib库_第10张图片

Release版本的build一样

把debug设置修改为release即可

visual studio和cmake如何编译dlib库_第11张图片

visual studio和cmake如何编译dlib库_第12张图片

记住:如果你自己的vs2013下的程序设置的是debug模式,使用的dlib也是debug。同样道理,你的程序是release,dlib也需要release。

下面需要设置在自己的程序中使用dlib,以debug模式为例。

下面以检测人脸特征点为例

Vs2013中建立一个控制台的空项目, face_landmarks,检测人脸的68个特征点

visual studio和cmake如何编译dlib库_第13张图片

visual studio和cmake如何编译dlib库_第14张图片

如果solution解决方案有多个project项目,设置为startup project,因为运行的时候只能运行一个project,就是运行这个设置为startup的project

visual studio和cmake如何编译dlib库_第15张图片

右键 sorce files中增加new item

visual studio和cmake如何编译dlib库_第16张图片

增加一个主c++文件

visual studio和cmake如何编译dlib库_第17张图片

确认设置好的是x64的debug环境,一定要点击下面的configuration manager看下

visual studio和cmake如何编译dlib库_第18张图片

下面显示还是win32,需要修改为x64,并且Build打勾要

visual studio和cmake如何编译dlib库_第19张图片

点击new,选择x64即可点击ok

visual studio和cmake如何编译dlib库_第20张图片

配置dlib的包含(include)文件和库(lib)文件的目录位置

包含文件路径

D:\lyp\Project\AI_Train\c_plus_opencv\learn_cv\CV\dlib_source\dlib-19.0

visual studio和cmake如何编译dlib库_第21张图片

库文件路径,就是上述build好的库文件位置

D:\lyp\Project\AI_Train\c_plus_opencv\learn_cv\CV\dlib_source\dlib-19.0\build\Debug

visual studio和cmake如何编译dlib库_第22张图片

配置链接库名 dlib.lib

visual studio和cmake如何编译dlib库_第23张图片

C/C++->预处理器添加

DLIB_PNG_SUPPORT

DLIB_JPEG_SUPPORT

visual studio和cmake如何编译dlib库_第24张图片

很多时候dlib需要和opencv配合使用,对于opencv的配置,看我这个系列的前面课程,有详细介绍。

Dlib19.20编译vs2015时候出现问题

  1. d:\lyp\project\ai_train\c_plus_opencv\learn_cv\dlib_vs2015\dlib\dlib\global_optimization/find_max_global.h(79): error C2535: “unknown-type dlib::gopt_impl::call_function_and_expand_args::go(T &&,const dlib::matrix &)”: 已经定义或声明成员函数 (编译源文件 D:\lyp\Project\AI_Train\c_plus_opencv\learn_cv\dlib_vs2015\dlib\dlib\svm\auto.cpp)

解决方案:

这个问题是由vs2015导致的。

Dlib源码中找到删除auto.cpp以及kalman_filter.cpp源码文件

visual studio和cmake如何编译dlib库_第25张图片

在项目文件中也删除

visual studio和cmake如何编译dlib库_第26张图片

重新编译后成功,实际使用中会出现问题

无法解析的外部符号 USER_ERROR__inconsistent_build_configuration__see_dlib_faq_2

该符号在函数 "void __cdecl `dynamic initializer for 'dlib_check_not_configured_helper_variable''(void)"

(??__Edlib_check_not_configured_helper_variable@@YAXXZ) 中被引用

  1. D:\lyp\code\id_photo\id_cmake\DMS\out_vc14_release\bin\pohotoSysSDK.dll : fatal error LNK

打开cmake之后的项目,找到这个路径(就是dlib的头文件目录)

visual studio和cmake如何编译dlib库_第27张图片

找到test_for_odr_violations.h,也就是下面这个

visual studio和cmake如何编译dlib库_第28张图片

点开找到这一段

注意

const extern int USER_ERROR__inconsistent_build_configuration__see_dlib_faq_2=0

这一行,官方的是没有“=0”的。加上,再编译就O了。

测试可以解决

你可能感兴趣的:(visual,studio,ide)