問題
使用CMake編譯Dlib庫,編譯得到lib文件后,新建一個VS工程想使用Dlib,卻出現LNK2001:無法解析的外部符號的錯誤,且都與JPEG和PNG相關:
1>dlib19.17.99_release_64bit_msvc1916.lib(png_loader.obj) : error LNK2001: 無法解析的外部符號 png_set_sig_bytes
1>dlib19.17.99_release_64bit_msvc1916.lib(png_loader.obj) : error LNK2001: 無法解析的外部符號 png_sig_cmp
1>dlib19.17.99_release_64bit_msvc1916.lib(png_loader.obj) : error LNK2001: 無法解析的外部符號 png_create_read_struct
1>dlib19.17.99_release_64bit_msvc1916.lib(png_loader.obj) : error LNK2001: 無法解析的外部符號 png_set_longjmp_fn
1>dlib19.17.99_release_64bit_msvc1916.lib(png_loader.obj) : error LNK2001: 無法解析的外部符號 png_create_info_struct
1>dlib19.17.99_release_64bit_msvc1916.lib(png_loader.obj) : error LNK2001: 無法解析的外部符號 png_set_palette_to_rgb
1>dlib19.17.99_release_64bit_msvc1916.lib(png_loader.obj) : error LNK2001: 無法解析的外部符號 png_destroy_read_struct
1>dlib19.17.99_release_64bit_msvc1916.lib(png_loader.obj) : error LNK2001: 無法解析的外部符號 png_init_io
1>dlib19.17.99_release_64bit_msvc1916.lib(png_loader.obj) : error LNK2001: 無法解析的外部符號 png_get_rows
1>dlib19.17.99_release_64bit_msvc1916.lib(png_loader.obj) : error LNK2001: 無法解析的外部符號 png_get_image_width
1>dlib19.17.99_release_64bit_msvc1916.lib(png_loader.obj) : error LNK2001: 無法解析的外部符號 png_get_image_height
1>dlib19.17.99_release_64bit_msvc1916.lib(png_loader.obj) : error LNK2001: 無法解析的外部符號 png_get_bit_depth
1>dlib19.17.99_release_64bit_msvc1916.lib(png_loader.obj) : error LNK2001: 無法解析的外部符號 png_get_color_type
1>dlib19.17.99_release_64bit_msvc1916.lib(png_loader.obj) : error LNK2001: 無法解析的外部符號 png_read_png
1>dlib19.17.99_release_64bit_msvc1916.lib(png_loader.obj) : error LNK2001: 無法解析的外部符號 png_get_header_ver
1>dlib19.17.99_release_64bit_msvc1916.lib(jpeg_loader.obj) : error LNK2001: 無法解析的外部符號 jpeg_std_error
1>dlib19.17.99_release_64bit_msvc1916.lib(jpeg_loader.obj) : error LNK2001: 無法解析的外部符號 jpeg_CreateDecompress
1>dlib19.17.99_release_64bit_msvc1916.lib(jpeg_loader.obj) : error LNK2001: 無法解析的外部符號 jpeg_destroy_decompress
1>dlib19.17.99_release_64bit_msvc1916.lib(jpeg_loader.obj) : error LNK2001: 無法解析的外部符號 jpeg_stdio_src
1>dlib19.17.99_release_64bit_msvc1916.lib(jpeg_loader.obj) : error LNK2001: 無法解析的外部符號 jpeg_mem_src
1>dlib19.17.99_release_64bit_msvc1916.lib(jpeg_loader.obj) : error LNK2001: 無法解析的外部符號 jpeg_read_header
1>dlib19.17.99_release_64bit_msvc1916.lib(jpeg_loader.obj) : error LNK2001: 無法解析的外部符號 jpeg_start_decompress
1>dlib19.17.99_release_64bit_msvc1916.lib(jpeg_loader.obj) : error LNK2001: 無法解析的外部符號 jpeg_read_scanlines
1>dlib19.17.99_release_64bit_msvc1916.lib(jpeg_loader.obj) : error LNK2001: 無法解析的外部符號 jpeg_finish_decompress
1>D:\Visual Studio 2017 Projects\FACE1\x64\Release\FACE1.exe : fatal error LNK1120: 24 個無法解析的外部命令
1>已完成生成項目“FACE1.vcxproj”的操作 - 失敗。
========== 全部重新生成: 成功 0 個,失敗 1 個,跳過 0 個 ==========

解決方法
出現LNK2001的錯誤是由於在編譯出來的lib文件中找不到所需函數的二進制碼。經過檢查,發現一開始在cmake進行Configure時打印出的日志出現了下面兩句:

只是由於CMake已經發現了在Python(Anaconda)環境中已經存在編譯好的JPEG和PNG的lib文件了。所以后續在vs中生成lib時,dlib\external文件夾下的與JPG和PNG相關的源碼都沒有參與編譯,因此生成的lib文件中也就不包含與JPEG和PNG相關的部分了。
