参考网上的教程安装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. uC/OS-II应用程序exe
  2. 解决R速度太慢问题
  3. Socket Programming in C#--Server Side
  4. 點擊按鈕后彈出新頁面導致原頁面CSS失效
  5. android实现系统电话通话过程中自动感应黑屏
  6. 【转】Winform下KeyDown,KeyPress,KeyUp事件的总结
  7. ArcGIS Runtime SDK for Android 10.2.5新开发平台安装配置指南
  8. TP复习3
  9. 导出项目为jar包
  10. webstorm提交版本时,忽略特定文件
  11. Java基础 -- 深入理解泛型
  12. github上传代码返回403错误
  13. bash的基础特性
  14. 根据Request获取客户端IP
  15. 将excel的数据导入到数据库后都乱码了是怎么回事
  16. redis make错误处理
  17. 解决PHP下载文件时因时文件太大而报404错误
  18. Xenocode Postbuild 2010 for .NET 混淆工具的详细使用步骤【转】
  19. 把MacBook里的电影导入到iPad
  20. 数字图像处理:基于MATLAB的车牌识别项目 标签: 图像处理matlab算法 2017-06-24 09:17 98人阅读 评论(0)

热门文章

  1. GCC高级测试功能扩展——程序性能测试工具gprof、程序覆盖测试工具gcov
  2. 算法笔记_030:回文判断(Java)
  3. 打造通用的Android下拉刷新组件(适用于ListView、GridView等各类View)
  4. DB中耗时的 存储过程 及执行详细情况
  5. Patterns-Proxy
  6. 对固态硬盘ssd进行4k对齐
  7. java之final
  8. linux配置java环境变量(详细) [转]
  9. Python图像处理(14):神经网络分类器
  10. LINQ to SQL语句之Select/Distinct和Count/Sum/Min/Max/Avg (转)