瑞士军刀DLib的VS2015编译

Dlib的官方解释是:

Dlib is a modern C++ toolkit containing machine learning algorithms and tools for creating complex software in C++ to solve real world problems. It is used in both industry and academia in a wide range of domains including robotics, embedded devices, mobile phones, and large high performance computing environments. Dlib's open source licensing allows you to use it in any application, free of charge.

总之简单的说就是:一个集图像处理、计算机视觉、机器学习、深度学习于一身的视觉相关的瑞士军刀就是了,重要的是,它跟OpenCV一样是开源免费的。

在windows中编译Dlib是比较简单的,先说一下我的配置以及相关的依赖库

  • Cmake:配置和生成VS2015工程;

  • VS2015:编译DLib工具的lib文件;

  • CUDA9和cudnn7:为了打开CUDA功能;

  • jpeg:依赖项,我下载了jpegsr9c.zip;

  • libpng:依赖项,我下载了lpng1635.zip;

  • zlib:依赖项,我下载了zlib-1.2.11.tar.gz;

  • Dlib:我下载了dlib-19.15,应该是目前最新版本了把,支持VC2015和VS2017;

OK,下载了这些之后,我默认是先安装好了VS、CUDA和cudnnde,然后就先编译依赖项,顺序依次是libjpegzliblpng。接下来就是配置Dlib的VS工程,在用Cmake打开之前,先把下载的DLib解压出来的,然后修改一下文件dlib/CMakeLists.txt,注意不是解压出来根目录的CMakeLists.txt,然后修改第719行到724行为:


#set(DLIB_USE_CUDA OFF CACHE STRING ${DLIB_USE_BLAS_STR} FORCE )
#toggle_preprocessor_switch(DLIB_USE_CUDA)
#if (USING_OLD_VISUAL_STUDIO_COMPILER)
#   message(STATUS "*** Dlib CUDA support requires C++11 but your compiler doesn't support it. ***")
#endif()
#message(STATUS "Disabling CUDA support for dlib.  DLIB WILL NOT USE CUDA")

set(source_files ${source_files} 
   cuda/cuda_dlib.cu 
   cuda/cudnn_dlibapi.cpp
   cuda/cublas_dlibapi.cpp
   cuda/cusolver_dlibapi.cu
   cuda/curand_dlibapi.cpp
   cuda/cuda_data_ptr.cpp
   cuda/gpu_data.cpp
   )
set(dlib_needed_libraries ${dlib_needed_libraries} 
   ${CUDA_CUBLAS_LIBRARIES} 
   ${cudnn}
   ${CUDA_curand_LIBRARY}
   ${cusolver}
   )
if(openmp_libraries)
   list(APPEND dlib_needed_libraries ${openmp_libraries})
endif()

include_directories(${cudnn_include})
message(STATUS "Enabling CUDA support for dlib.  DLIB WILL USE CUDA")

这个主要还是为了打开CUDA,如果不用CUDA就不用了。

然后Cmake打开,这里需要注意,如果要配置CUDA的话,就一定要用管理员权限打开CMake,配置相关项目如下:

这里面有几个我是没有配置的:BLAS、CPACK、GIF、mkl,这几个是没有配置。

配置好之后,生成工程。然后打开VS,如果要使用CUDA,这里最好也用管理员权限打开VS2015,然后打开工程:

同样,这里也是对整个解决方案执行编译,然后再对INSTALL单独编译打包头文件和Lib文件,如果前面配置没有什么问题的话,这里应该是会灰常顺利的。打包出来的库文件如下:

然后,这里要注意,虽然打包出来了Dlib的头文件,但是在用的时候要把前面编译出来的其他依赖库的头文件加到工程里,这个后面讲DLib的例子的时候具体再说吧。 

天地不仁,以万物為刍狗;

圣人不仁,以百姓為刍狗。

上善若水,为而不争。
原文地址:https://www.cnblogs.com/Bearoom/p/11721790.html