当前位置: 首页 > news >正文

ubuntu 安装dlib 出现dlib.so: undefined symbol: png_set_longjmp_fn

 

参考网上的教程安装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
  • 购物车优化
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • spring mvc 配置文件加载
  • 用canvas实现一个colorpicker
  • JDK8新特性(2):Stream API常用操作
  • BZOJ 2457 [BeiJing2011] 双端队列
  • 如何用TensorFlow生成令人惊艳的分形图案
  • Hive SQL 练习(这个秒退是怎么回事啊?写了半天 东西都没了,瞬间整个人都凌乱了)...
  • SylixOS之TFTP使用
  • mysql初探
  • 洛谷——P2862 [USACO06JAN]把牛Corral the Cows
  • web开发经验
  • Zookeeper+ActiveMQ 集群实现
  • Android 使用DDMS查看内存使用情况
  • 【RocksDB】TransactionDB源码分析
  • 03Go 类型总结
  • ES10 特性的完整指南
  • gf框架之分页模块(五) - 自定义分页
  • magento2项目上线注意事项
  • PHP那些事儿
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • webpack+react项目初体验——记录我的webpack环境配置
  • 半理解系列--Promise的进化史
  • 从零搭建Koa2 Server
  • 工作手记之html2canvas使用概述
  • 关于extract.autodesk.io的一些说明
  • 简单数学运算程序(不定期更新)
  • 简析gRPC client 连接管理
  • 目录与文件属性:编写ls
  • 十年未变!安全,谁之责?(下)
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 新书推荐|Windows黑客编程技术详解
  • Python 之网络式编程
  • python最赚钱的4个方向,你最心动的是哪个?
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • 组复制官方翻译九、Group Replication Technical Details
  • ​linux启动进程的方式
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (52)只出现一次的数字III
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (Python第六天)文件处理
  • (WSI分类)WSI分类文献小综述 2024
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .java 9 找不到符号_java找不到符号
  • .net core Swagger 过滤部分Api
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .NET导入Excel数据
  • .net的socket示例
  • .sdf和.msp文件读取