我需要为我维护的旧版 Rails 应用程序安装 6.9 版本的 ImageMagick(在 RVM 中使用 Ruby 1.8.6)。
这是 Linux Mint 18 的新安装中的。
我下载了一个“ImageMagick-6.9.6-7.tar.gz”文件,将其解压缩,进入生成的文件夹并尝试构建它。
这一步有很多输出./configure
,但看起来足够高兴。然而,make
由于大量输出而失败:有大量这样的东西:
coders/png.c: In function ‘ReadOnePNGImage’:
coders/png.c:2238:45: warning: passing argument 3 of ‘png_set_keep_unknown_chunks’ discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
png_set_keep_unknown_chunks(ping, 1, mng_iCCP, 1);
^
In file included from /usr/include/libpng12/png.h:321:0,
from coders/png.c:101:
/usr/include/libpng12/png.h:2330:25: note: expected ‘png_bytep {aka unsigned char *}’ but argument is of type ‘const png_byte * {aka const unsigned char *}’
extern PNG_EXPORT(void, png_set_keep_unknown_chunks) PNGARG((png_structp
ETC。
由于这是一个新安装,我怀疑我可能缺少一些构建工具或开发工具或其他东西。有人可以帮忙吗?抱歉,如果这有点模糊。
编辑:我已安装的软件包的完整列表:http://pastebin.com/bJg4qC0M
编辑2:完整输出make
: http://pastebin.com/qXu5FUC4
编辑3:输出make install
:http://pastebin.com/5TPeQScp
答案1
看看实际情况错误消息(您在问题中提到的事情是警告,这不会终止编译过程):
libtool:安装:/usr/bin/install -c magick/.libs/libMagickCore-6.Q16.so.2.0.0 /usr/local/lib/libMagickCore-6.Q16.so.2.0.0 /usr/bin /install:无法创建常规文件“/usr/local/lib/libMagickCore-6.Q16.so.2.0.0”:权限被拒绝
这意味着当您运行 时make install
,您是以无权在/usr/local/lib
目录中创建文件的用户身份执行的。
对此有几个解决方案。
搬起石头砸自己的脚的解决方案就是逃跑sudo make install
。这很糟糕,因为
当你运行时你不知道Makefile做了什么
make install
,在最坏的情况下,你可能会执行恶意代码root
。在 Linux 系统(或任何 Unix 系统)上安装东西
/usr/local
是不好的,因为这通常是各种包管理器安装文件的位置。这意味着您可能面临覆盖现有文件的风险。您打算如何卸载该软件?
几个更好的解决方案:
配置项目以安装在中立环境中,例如
/opt
或/sw
(系统和包管理器未使用的位置)。通过configure
使用选项运行来执行此--prefix
操作,例如./configure --prefix=/opt
.请注意sudo make install
,除非您在安装层次结构中具有写入权限,否则这可能仍需要您运行。配置项目以安装在我们的主目录下的某个位置。如果您不需要在系统范围内安装该东西,这可能是最好的选择。只需按照上面的操作,但将安装前缀设置为
$HOME/local
, 或什至$HOME/tmp
(然后在完成后删除该目录)。
第一种方法并不能完全解决稍后卸载软件的问题,而第二种方法只有在安装到空层次结构(只是rm -rf
整个东西)时才能解决该问题。为此,我可以推荐GNU 斯托公用事业。这使得卸载您自己构建的软件变得更加容易。如果没有它,如果您想卸载某些东西,就很难确定必须删除哪些文件。