问题

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

 

C++编译Dlib库出现LNK2001错误(原因是在Python中安装过Dlib)的更多相关文章

  1. python中安装dlib和cv2

    这两个模块是很容易出问题的模块,以下的解决办法都是从网上收集而来. 安装dlib: pypi.python.org/pypi/dlib/19.6.0 下载 dlib-19.6.0-cp36-cp36m ...

  2. python中安装第三方库(使用豆瓣的镜像网站快速安装)

    #安装第三方库#标准库,第三方库#pip install selenium 直接从官网进行安装,有时网速会有点慢#可以去国内的镜像站安装#pip install selenium -i https:/ ...

  3. python中安装requests后又提示错误

    刚刚我们是安装成功了的,新建一个项目又提示红色的波浪线了,,郁闷了 解决方法:点击pycharm菜单:File-Settings,键入Project Interpreter,我电脑python安装路径 ...

  4. Centos6.8 安装dlib库时出错【升级gcc 到4.9.0以上】

    在centos6.8上安装dlib库时出现错误: 1.CMake must be installed to build the following extensions: dlib 没有安装CMake ...

  5. keilc 4 编译出现的几个错误…

    原文地址:keilc 4 编译出现的几个错误解决作者:黑子     今天安装了keilc4,因为项目用到,所以把遇到的几个编译错误解决方法说说,第一次写东西不知道写啥!!    一  第一个是错误提示 ...

  6. PHP如何进行错误与异常处理(PHP7中的异常处理和之前版本异常处理的区别)

    PHP如何进行错误与异常处理(PHP7中的异常处理和之前版本异常处理的区别) 一.总结 一句话总结: throwable接口+Error类 在PHP7更新中有一条:更多的Error变为可捕获的Exce ...

  7. 用Visual Studio 2015 编译张帆的第一个NT式驱动,并且成功安装到Windows XP里面!!!

    开发工具:Visual Studio 2015 企业版 目 标 机:Windows XP X86 前提:我们已经成功安装了Visual Studio 2015以及WDK,而且更重要一点是一定要SDK版 ...

  8. Windows7 x64 编译Dlib库

    最近用到Dlib库,需要先编译. 本文利用 cmake + Sublime Text 2 + MinGW实现编译. 1. 下载dlib源码[dlib18.17]http://pan.baidu.com ...

  9. 无法链接glew的解决办法-编译开源库出现: error LNK2001: 无法解析的外部符号

    无法链接glew的解决办法-编译开源库出现: error LNK2001: 无法解析的外部符号 参考官方配置指南:http://glew.sourceforge.net/install.html 1. ...

随机推荐

  1. [考试总结]noip模拟40

    最近真的是爆炸啊... 到现在还是有不少没改出来.... 所以先写一下 \(T1\) 的题解.... 送花 我们移动右端点,之后我们用线段树维护全局最大值. 之后还要记录上次的位置和上上次的位置. 之 ...

  2. Linux原始套接字抓取底层报文

    1.原始套接字使用场景 我们平常所用到的网络编程都是在应用层收发数据,每个程序只能收到发给自己的数据,即每个程序只能收到来自该程序绑定的端口的数据.收到的数据往往只包括应用层数据,原有的头部信息在传递 ...

  3. 原子操作cas

    一.概念, 基于处理器指令,把比较和交换合成一个指令完成,保证了原子性: 因为是针对一个内存地址值的,一个内存地址指向一个变量,所以只对一个共享变量能保证原子性: 二.原子操作类 锁只有synchro ...

  4. java短信群发项目:

    编写一个项目, 1. 以下手机号码段,添加到Map集合当中 2. 从控制台输入要发送信息的短信号码,如果要发送多个,请用英文逗号隔开,输入短信内容 3. 编写一个短信发送类,号码发送前,先判断号码是否 ...

  5. CodeForce-812B Sagheer, the Hausmeister(DFS)

    Sagheer, the Hausmeister CodeForces - 812B 题意:有一栋楼房,里面有很多盏灯没关,为了节约用电小L决定把这些灯都关了. 这楼有 n 层,最左边和最右边有楼梯. ...

  6. Cookie和Session的介绍与认识

    Cookie: cookie是一种客户端的状态管理技术. 当浏览器向服务器发送请求的时候,服务器会将少量的数据以set-cookie消息头的方式发送给浏览器,当浏览器再次访问服务器时,会将这些数据以c ...

  7. linux centos系统 php安装GD库扩展

    yum --enablerepo=remi-php56 install php-gd php-mysql php-mbstring php-xml php-mcrypt //安装GD库扩展 servi ...

  8. 数据库删除discuz 部分数据操作

    如何快速清理discuz 3.2 中等待审核的回复数:pre_forum_post_moderate,点击清空 清空回收站的主题帖:DELETE FROM `pre_forum_thread` WHE ...

  9. SonarQube安装Java扫描插件

    近段时间在研究sonarqube,成功扫描python项目,但是扫描java项目失败. 在网上查询到,扫描java项目需要安装Java插件. 如下图: 而我在最新的sonarqube中搜索java,没 ...

  10. git 合并分支 git merge branch_name

    * 查看分支 git branch * 更新 git pull * 切换到master分支 git checkout master Checking out files: 100% (907/907) ...