参考网上的教程安装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. windows下flv视频网站进度条随意拖放[转]

    网站中视频都转换成flv格式,奈何flv格式无法拖拽,此问题纠结了好久,最终得以解决.现将解决思路记录下来,大多数源于网上找到的. 视频拖拽满足要求 1.播放器要支持 2.flv视频要有关键帧和met ...

  2. JQuery 之CSS操作

    JQuery 之CSS操作 设置 <p> 元素的颜色: 将所有段落的颜色设为红色 $(".btn1").click(function(){ $("p" ...

  3. [转发]jQuery Validation范例

    验证操作类formValidatorClass.js参照文件有: http://www.cnblogs.com/easyinsc/archive/2009/02/27/1407826.html htt ...

  4. 〖Linux〗Debian 7.1.0 Wheezy使用ltib报错的解决办法

    报错内容: scue@Link:/home/work/ltib$ ./ltib Processing platform: Phytec board with the NXP LPC32XX SoC = ...

  5. 【Django】TemplateDoesNotExist at /login/

    在Django项目中配置一个简单的页面跳转 说明 OliverPro 为项目名称 ProApp 为应用程序 项目文件结构如下: 文件配置如下: 项目中的urls 应用程序urls views.py文件 ...

  6. Spring 基于Aspectj切面表达式

    package com.proc; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; im ...

  7. 36、TreeSet详解

    TreeSet是SortedSet接口的实现类,TreeSet可以保证元素处于排序状态.与HashSet相比,TreeSet还提供了如下几个而外的方法: 1).Comparator comparato ...

  8. mysql GROUP_CONCAT 函数 将相同的键的多个单元格合并到一个单元格

    mysql GROUP_CONCAT 函数 将相同的键的多个单元格合并到一个单元格 MemberID MemberName FruitName -------------- ------------- ...

  9. 转:TCP/IP协议选项——TCP_KEEPALIVE .

    [+] KEEPALIVE作用 KEEPALIVE代码示例 KEEPALIVE脚本设置   1.KEEPALIVE作用 KEEPALIVE机制,是TCP协议规定的TCP层(非应用层业务代码实现的)检测 ...

  10. 基于SSM + Redis的Shiro权限管理项目

    概述 本教程结合SSM(SpringMVC + Mybatis)框架讲解Shiro,讲解的内容有自定义shiro拦截器,Shiro Freemarker标签,Shiro JSP标签,权限控制讲解. 详 ...