参考网上的教程安装dlib

安装教程1 
sudo apt-get install libboost-python-dev cmake
sudo pip install dlib
安装教程2
ubuntu下的安装

进入官网下载安装包,解压

 安装编译所需工具

 sudo apt-get install cmake
 sudo apt-get install libboost-python-dev

进入dlib的目录
sudo python setup.py install
出现下面的错误
$ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import dlib
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: ./dlib.so: undefined symbol: png_set_longjmp_fn
>>>

问题原因

这个是在Linux上编译项目的时候,一个动态库层用到的一个函数实现未找到,,

系统安装了libpng16.so.16.29.0*, readelf -s了下这个文件,是有png_set_longjmp_fn这个符号的

lrwxrwxrwx  1 root root         19 6月   1 10:49 libpng16.so -> libpng16.so.16.29.0*
lrwxrwxrwx 1 root root 19 6月 1 10:49 libpng16.so.16 -> libpng16.so.16.29.0*
-rwxr-xr-x 1 root root 926416 6月 1 10:49 libpng16.so.16.29.0*

查找原因发现:

系统中还有一个位置安装了旧版本的libpng12,

/lib/x86_64-linux-gnu

-rwxrwxrwx 1 root root 149800 10月 19 19:21 libpng12.so.0*
-rwxrwxrwx 1 root root 149800 10月 19 19:21 libpng12.so.0.54.0*

该版本中的libpng中是没有png_set_longjmp_fn的函数定义的,编译相关的库 dlib 依赖的时候,

首先是链接到/lib/x86_64-linux-gnu/libpng12.so.0找不到该函数,报错。

解决方法1:(推荐)

cd /lib/x86_64-linux-gnu

sudo rm libpng12.so.0  (这里删除老版本的libpng库)

sudo rm libpng12.so.0.54.0

sudo ln -s /usr/local/lib/libpng16.so.16 ./libpng16.so.16 (建立一个链接,指向libpng16)

这样系统编译的时候,链接到/usr/local/lib/libpng16.so.16的库中

解决方法2:

png使用过程问题小结:

(1) libpng “png_set_longjmp_fn” not found

解决思路

In my case, I have the old png 1.2 came with my ubuntu installed in /usr. I installed the 1.6.x in /usr/local. In my make system, the default include /usr/include and linking /usr/lib were picked up. When compiling any software that rely on the new interface, you need to add

CPPFLAGS="-I/usr/local/include $CPPFLAGS"
LDFLAGS="-L/usr/local/lib $LDFLAGS"

this will pick up

grep png_set_longjmp_fn png.h
PNG_EXPORT(8, jmp_buf*, png_set_longjmp_fn, (png_structrp png_ptr,
      (*png_set_longjmp_fn((png_ptr), longjmp, (sizeof (jmp_buf))))

翻译过来就是:编译程序时,在makefile 中 加入

CPPFLAGS="-I/usr/local/include $CPPFLAGS"
LDFLAGS="-L/usr/local/lib $LDFLAGS"
使得所依赖的libpng库都指向自己安装的最新libpng16

 

ubuntu 安装dlib 出现dlib.so: undefined symbol: png_set_longjmp_fn的更多相关文章

  1. Ubuntu安装dlib后import出现libstdc++.so.6: version `GLIBCXX_3.4.21' not found

    1 问题描述 先安装依赖包cmake,libboost,再安装dlib sudo apt-get install cmake sudo apt-get install libboost-python- ...

  2. 安装与编译Dlib(以Ubuntu16.04+Python3.6+pip为例)

    安装与编译Dlib(以Ubuntu16.04+Python3.6+pip为例) Step1:下载Ubuntu (or Linux)系统支持库=>Install OS libraries -dev ...

  3. centos使用yum安装软件的时候出现了undefined symbol: CRYPTO_set_locking_callback

    1.问题 在CentOS下使用yum安装软件,结果出现了下面的错误提示: # yum installThere was a problem importing one of the Python mo ...

  4. apache 安装/mod_dir.so: undefined symbol: apr_array_clear

    apache 安装好后 启动出错: httpd: Syntax error on line 143 of /usr/local/apache2/conf/httpd.conf: Cannot load ...

  5. apache安装mod_ssl.so 出现 undefined symbol: ssl_cmd_SSLPassPhraseDialog错误解决

    很久很久以前,安装Apache的时候,根本没想过将来的某一天会使用到ssl,所以也就没有安装那个模块,结果今天需要用到的时候,却无从下手了. 由于在安装Apache的时候,mod_ssl.so这个文件 ...

  6. undefined symbol libiconv_open 完全解决方案

    我在另一篇关于Ubuntu+Sendmail+Dovecot+Openwebmail 邮件服务器搭建完全解决方案文章完成后,我的邮件服务器也搭建完成了, 事实上也正在运行中, 但是有网友依据我的操作步 ...

  7. Ubuntu安装使用pyltp和StanfordCoreNLP

    环境:Ubuntu 16.04+anaconda3 一.pyltp 1. 安装 直接用pip安装: pip install pyltp 然后下载语言模型库,网址:https://pan.baidu.c ...

  8. Ubuntu 安装 QtCreator (version : Qt 5.9.8)

    平台 :Ubuntu 16.04 QT         :5.9.8 (open source)     首先去QT安装包下载安装包,为了保持与arm板子的统一,本人选择了 5.9.8 版本的QT 可 ...

  9. python import cv2 出错:cv2.x86_64-linux-gnu.so: undefined symbol

    之前写过一个python使用opencv处理图片的脚本,当时是可以使用的,现在突然发现执行时出错: ImportError: /usr/lib/python2.7/dist-packages/cv2. ...

随机推荐

  1. UVA 270 Lining Up (几何 判断共线点)

     Lining Up  ``How am I ever going to solve this problem?" said the pilot. Indeed, the pilot was ...

  2. HDU4626+博弈

    博弈... /* 博弈 对于当前人来说,如果完成自己的操作后,若mat[n][m]==0,则自己是胜者. 因为 如果mat其他位置不存在1了,肯定自己胜:如果存在1,则让下一位去反转那个1. */ # ...

  3. hdu 2896 AC自动机模版题

    题意:输出出现模式串的id,还是用end记录id就可以了. 本题有个关键点:“以上字符串中字符都是ASCII码可见字符(不包括回车).”  -----也就说AC自动机的Trie树需要128个单词分支. ...

  4. DAS存储未死,再次欲获重生

    当我们回想存储发展形态时.我们会想到DAS是最原始最主要的存储方式,在个人电脑.server等低端市场和场景上随处可见. 存储的原始形态也来自于DAS,常见的用于连接DAS和主机系统的协议/标准主要 ...

  5. 问题解决——MFC SDI程序 CFormView中控件随窗体缩放

    从来都是做对话框程序,这次想做个SDI的程序,想着用一下带Robbin界面的office2007风格.就不用使用那些花钱的商业控件/UI库了. 假设你不想看我打的文字.能够直接拷走代码,自己声明上定义 ...

  6. OpenERP函數字段的應用

    在ERP開發過程中經常會使用到某字段的值是由其他字段計算得來,並且有些還需要將計算的結果存入資料庫. 以上功能上OpenERP中是用field.function實現的 其中有種模式 a). 只計算,不 ...

  7. powershell执行脚本

    powershell执行脚本   执行powershell脚本有两种方式: 1.通过命令行参数启动脚本 C:\Windows\System32\WindowsPowerShell\v1.0\power ...

  8. USES_CONVERSION的使用和注意

    USES_CONVERSION是用来转换类型的,比如我们很常见的问题: 在Socket编程时候,我们的IP地址从界面上输进去一般都使用CString类型的,可是在SOCKADDR_IN中的inet_a ...

  9. python3.x +django + nginx + uwsgi 搭建web服务

    最近一直在用django开发自己的网站.在开发和线上环境的对接过程中遇到了许多的坑.所以想以一个老鸟的经历来写一下怎么 搭建web服务 一.python3.x .django .nginx .uwsg ...

  10. MySQL防止delete命令删除数据

    在sql中删除数据库中记录我们会使用到delete命令,这样如果不小心给删除了很难恢复了,总结一些删除数据但是不在数据库删除的方法. 方法一 我常用的做法,就是在数据库中加一个删除标识字段,如: is ...