问题

使用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窗口,再重新打开,否则不会重复检查!!切记!!

 

最新文章

  1. oracle number型日期转date型日期
  2. 国家与城市的sql
  3. zw版【转发·台湾nvp系列Delphi例程】HALCON HWindowX 01
  4. hdu 1515 Anagrams by Stack
  5. Unity3D之飞机游戏追踪导弹制作
  6. PHP开发APP接口(二)
  7. QQ群成员提取
  8. 751D·PARK北京时尚设计广场_百度百科
  9. Restful based service 的跨域调用
  10. 服务器 ADO 错误:0x80004005,[DBNETLIB]
  11. Android简易实战教程--第六话《开发一键锁屏应用2·完成》
  12. meta、link、script的常用写法
  13. [poj P1475] Pushing Boxes
  14. Mybatis 3 配置 Log4j
  15. [No0000190]vim8安装教程和vim中文帮助文档Vimcdoc安装方法-Vim使用技巧(5)
  16. luogu P2713 罗马游戏
  17. 时间戳Id
  18. linux 批量文件查找并替换
  19. Ubuntu 提权漏洞(CVE-2019-7304)复现
  20. C语言——<算法>_冒泡算法的使用及理解

热门文章

  1. python opencv cv2 imshow threading 多线程
  2. 后端拜拜,用不到你了,前端开发数据模拟神器nodejs
  3. Linux 安装 Harbor 私有镜像仓库
  4. json包中的Marshal&Unmarshal 文档译本
  5. elasticsearch入门到放弃之elasticsearch-head
  6. JavaScript循环 — for、for/in、while、do/while
  7. Vue3的新特性及相关的Composition API使用
  8. Java面向对象系列(7)- 什么是继承
  9. Writing in the Science 01
  10. python读取文件编码转换问题