Macos 如果我可以';t设置'DYLD\u LIBRARY\u PATH`?

Macos 如果我可以';t设置'DYLD\u LIBRARY\u PATH`?,macos,imagemagick,dylib,Macos,Imagemagick,Dylib,我正在为macOS(Mojave)开发一个命令行实用程序,它使用ImageMagick处理图像。我想将它作为一个独立的应用程序共享,这样其他人就可以直接使用它,而无需安装任何附加的dylib或框架。ImageMagick的自制版本和MacPorts版本似乎“硬连线”到Mac的系统目录结构(分别为/usr/local和/opt/local),因此很难(不可能?)将ImageMagick及其代理库放入便携式应用程序包中。因此,我使用的是直接从 我按照该页面上的安装说明将ImageMagick文件夹放

我正在为macOS(Mojave)开发一个命令行实用程序,它使用ImageMagick处理图像。我想将它作为一个独立的应用程序共享,这样其他人就可以直接使用它,而无需安装任何附加的dylib或框架。ImageMagick的自制版本和MacPorts版本似乎“硬连线”到Mac的系统目录结构(分别为
/usr/local
/opt/local
),因此很难(不可能?)将ImageMagick及其代理库放入便携式应用程序包中。因此,我使用的是直接从

我按照该页面上的安装说明将ImageMagick文件夹放在我的主目录中(位于
~myname
)。按照指示,我导出了DYLD\u LIBRARY\u PATH=“/Users/myname/ImageMagick-7.0.8/lib/”。但当我运行
magick
时,会收到一条错误消息:

$ ~myname/ImageMagick-7.0.8/bin/magick logo: test.jpg
dyld: Library not loaded: /ImageMagick-7.0.8/lib/libMagickCore-7.Q16HDRI.6.dylib
  Referenced from: /Users/myname/ImageMagick-7.0.8/bin/magick
  Reason: image not found
Abort trap: 6
$
很明显,
magick
找不到它的动态库,即使我按照指示设置了
DYLD\u LIBRARY\u路径
。事实上,我甚至无法将
DYLD\u LIBRARY\u PATH
导出到环境中:

$ export MAGICK_HOME="/Users/myname/ImageMagick-7.0.8"
$ export DYLD_LIBRARY_PATH="$MAGICK_HOME/lib/"
$ echo $DYLD_LIBRARY_PATH
/Users/myname/ImageMagick-7.0.8/lib
$ printenv | grep DYLD_LIBRARY_PATH
   # (nothing)
$ printenv | grep ImageMagick
MAGICK_HOME=/Users/myname/ImageMagick-7.0.8
$ 

发生什么事了?如何使ImageMagick可移植?

首先,ImageMagick网站上当前的IM版本(7.0.8版)适用于macOS High Sierra。因此,在莫哈韦安装它时遇到问题也就不足为奇了。(然而,FWIW、当前的自制版本(IM 7)和MacPorts(IM 6)确实适用于莫哈韦。但是,像你一样,我不知道如何使这些版本对代理的处理真正可移植。)

您无法导出
DYLD_LIBRARY_PATH
的原因是,苹果公司将其添加到了较新版本的macOS(El Capitan及更高版本)中。默认情况下,SIP禁止更改env变量
DYLD\u LIBRARY\u PATH
等操作。尽管如此,苹果并不建议这样做

但是,您可以使用
install\u name\u tool
手动修改
magick
及其动态库,以便IM7.0.8在Mojave上运行良好。下面是(在
bash
中)的方法:

现在它可以工作了:

$ /Users/myname/ImageMagick-7.0.8/bin/magick logo: test.jpg
$ open test.jpg
$ # (Preview opens a nice picture of the ImageMagick logo.)
这将修改相对于
magick
命令位置的dylibs路径。只要您保持ImageMagick文件夹的目录结构不变,它现在应该是完全可移植的

您可以轻松地将这五个
install\u name\u tools
命令放入一个小小的
bash
脚本中。我将把它作为练习留给读者。:)

$ /Users/myname/ImageMagick-7.0.8/bin/magick logo: test.jpg
$ open test.jpg
$ # (Preview opens a nice picture of the ImageMagick logo.)