Macos 如果我可以';t设置'DYLD\u LIBRARY\u PATH`?
我正在为macOS(Mojave)开发一个命令行实用程序,它使用ImageMagick处理图像。我想将它作为一个独立的应用程序共享,这样其他人就可以直接使用它,而无需安装任何附加的dylib或框架。ImageMagick的自制版本和MacPorts版本似乎“硬连线”到Mac的系统目录结构(分别为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文件夹放
/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.)