项目中需要手动安装一个定制版的rawpy,在安装rawpy之前,需要安装LibRaw库。安装过程踩了一些坑,做个记录,以备后用。
LibRaw的源码下载地址:Download | LibRaw
可以根据自己的平台和需要的版本下载,我下载的是0.19版本。
下载到本地后,解压得到LibRaw-0.19.1目录,进入该目录,进行配置、编译和安装。 编译安装说明可参考该地址:Compilation and Installation | LibRaw
1. 'aclocal-1.15' is missing on your system.
第一次时,直接执行的./configure,接着make
在make时出现报错:'aclocal-1.15' is missing on your system.
于是全盘查找aclocal:find / -name aclocal,结果并未找到。通过网络搜索,了解到该组件的作用如下:
aclocal是一个perl脚本程序,它的定义是:aclocal - create aclocal.m4 by scanning configure.ac。autoconf从configure.in这个列举编译软件时所需要的各种参数的模板文件中创建configure。autoconf需要GNU m4宏处理器来处理aclocal.m4,以生成configure脚本。
从GNU官方文档上可以看到aclocal的作用:
aclocal是automake的一个组成部分,于是我们执行automake --version 查看系统中是否安装automake,发现找不到该命令,于是通过命令安装automake:
apt-get install automake-1.15
安装完执行automake --version,发现已经安装成功了:
2. libtool: error: you must specify an output file
安装完automake之后,执行make命令可以正常往下执行,但是执行到后面会出现题目中的错误。
网上类似错误的资料不算少,所以比较快定位到原因:可能是由于先将LibRaw的安装包下载到Windows机器上,在Windows机器上解压之后,通过FTP软件上传到Linux服务器时,导致很多shell脚本的可执行权限被取消。手动对各.sh文件添加可执行权限后仍然不行,索性把压缩包上传到服务器,然后在服务器上解压之后再执行配置、编译和安装,这次终于通过了。
3. ImportError: libraw.so.19: cannot open shared object file
LibRaw安装完成之后,接下来通过源码安装rawpy (进入rawpy源码目录,pip install -e .),安装成功。然后执行调用rawpy的Python文件时,出现找不到libraw.so的问题。
查看LibRaw的编译文档,发现默认情况下只会编译输出静态库,没有输出动态库:
于是尝试在编译LibRaw库的时候,将动态库使能:
./configure ----enable-shared
重新编译完成后,仍然会报上面的错误。到默认安装目录/usr/local/lib下查看,已经生成了.so文件,且版本也对。
按照以往经验,只有一种可能,就是该路径未加入环境变量,于是进入到/etc/ld.so.conf,将该库路径写入:
然后执行ldconfig使之生效。
再次执行应用程序,成功了!