最近的工作中用到了dlib這個庫,該庫是一個機器學習的開源庫,使用起來很方便,直接包含頭文件即可,並且不依賴於其他庫(自帶圖像編解碼庫源碼)。不過由於是開源的,所以bug多少有一些,我在example編譯和使用時就遇到了一些問題,總結如下:
1.example編譯
按照官網的指導,下載最新的18.18版本dlib,然后解壓縮到某個路徑。dlib庫不用單獨編譯,只需要編譯example,即可看到效果。根據README.txt文件中的步驟,在exmaple文件夾下,執行下面命令即可,
mkdir build
cd build
cmake ..
cmake --build .
但是一般在最后一步會遇到一些問題,導致編譯失敗,解決方法如下:
1.在dlib/CMakeLists.txt中 project(dlib) 的下一行添加set(Boost_USE_STATIC_LIBS ON)
2.把 if (DLIB_PNG_SUPPORT) (227行左右)這一行以下的這些代碼進行注釋,其余不變
# try to find libpng #find_package(PNG QUIET) # Make sure there isn't something wrong with the version of LIBPNG # installed on this system. #if (PNG_FOUND) #set(CMAKE_REQUIRED_LIBRARIES ${PNG_LIBRARY}) #CHECK_FUNCTION_EXISTS(png_create_read_struct LIBPNG_IS_GOOD) #endif() #if (PNG_FOUND AND LIBPNG_IS_GOOD) #include_directories(${PNG_INCLUDE_DIR}) #set (dlib_needed_libraries ${dlib_needed_libraries} ${PNG_LIBRARY}) #else() # If we can't find libpng then statically compile it in.
3.把 if (DLIB_JPEG_SUPPORT) (280行左右)這一行以下的這些代碼進行注釋,其余不變
# try to find libjpeg #find_package(JPEG QUIET) # Make sure there isn't something wrong with the version of libjpeg # installed on this system. Also don't use the installed libjpeg # if this is an APPLE system because apparently it's broken (as of 2015/01/01). #if (JPEG_FOUND) #set(CMAKE_REQUIRED_LIBRARIES ${JPEG_LIBRARY}) #CHECK_FUNCTION_EXISTS(jpeg_read_header LIBJPEG_IS_GOOD) #endif() #if (JPEG_FOUND AND LIBJPEG_IS_GOOD AND NOT APPLE) #include_directories(${JPEG_INCLUDE_DIR}) #set (dlib_needed_libraries ${dlib_needed_libraries} ${JPEG_LIBRARY}) #else() # If we can't find libjpeg then statically compile it in.
這樣應該就可以編譯通過了,編譯出的二進制文件應該也可以執行,如果執行時依然報錯找不到jpeg或png庫,再確認一下CMakeLists文件是否按照上述修改。