设为首页 收藏本站
查看: 993|回复: 0

[经验分享] ubuntu 安装dlib 出现dlib.so: undefined symbol: png_set_longjmp_fn

[复制链接]

尚未签到

发表于 2017-11-19 17:30:52 | 显示全部楼层 |阅读模式
  参考网上的教程安装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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-408602-1-1.html 上篇帖子: ubuntu 安装redis两种方式 教程 下篇帖子: ubuntu工作常用命令及需要留意的点汇总
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表