标签:lib Python LNK2001 msvc1916 error release Dlib png
问题
使用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相关的部分了。
根据红框中显示的路径,将Anaconda\Library\lib文件夹下所有与jpg、png和z有关的lib文件后缀名先改成.lib.bak,让CMake检测不到,然后再运行CMake编译。
在第二次编译的时候会发现还是没有删干净,一定要多用CMake编译几次,仔细检查,确定没有Found system copy of XXX为止。
注意!每次使用CMake都要先关闭CMake窗口,再重新打开,否则不会重复检查!!切记!!
标签:lib,Python,LNK2001,msvc1916,error,release,Dlib,png 来源: https://www.cnblogs.com/SirJackie/p/15450387.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。