在你的包中设置 MAGICK_CODER_MODULE_PATH 怎么样?
见这里: http ://www.imagemagick.org/script/resources.php
编辑:
改善信息:
最初在我们自己的应用程序包中嵌入 IM 时,我们遇到了三个问题:
- 我们的应用程序和 IM dylib 没有找到引用的 IM dylib,
- IM 找不到它的配置文件,
- IM 找不到编码器(No Decode Delegate 错误)
我们尝试使用 install_name_tool 更改 dylibs 中的硬编码路径,但最后在进行一些测试时将 IM 移动到不同的目录并进行测试
convert -debug configuration
我们发现,只要在运行 convert 之前在终端控制台中设置和导出至少这三个环境变量,就可以解决上述所有三个问题:
DYLD_LIBRARY_PATH
MAGICK_CONFIGURE_PATH
MAGICK_CODER_MODULE_PATH
有了这个经验,我们回到了我们的包,并在开始时尝试使用 Info.plist 字段来设置这些变量,但它似乎不起作用 - 可能是因为在包中设置 IM 相对路径时存在问题.
最后,我们创建了一个简单的 sh 脚本并将其放入我们的包中,并将此包配置为运行此脚本而不是主应用程序:
#!/bin/sh
CURR_DIR="$( cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
IMAGE_MAGICK_PATH=$CURR_DIR/../Resources/ImageMagick
export DYLD_LIBRARY_PATH=$IMAGE_MAGICK_PATH/lib
export MAGICK_CONFIGURE_PATH=$IMAGE_MAGICK_PATH/lib/ImageMagick-6.8.0/config
export MAGICK_CODER_MODULE_PATH=$IMAGE_MAGICK_PATH/lib/ImageMagick-6.8.0/modules-Q16/coders
# run application
exec $CURR_DIR/OurAppName
使其正常工作的关键是正确获取应用程序包的 CURR_DIR(感谢这篇文章)。
正如我们的测试得出的那样,以这种方式设置环境变量使它们仅在此应用程序执行上下文中可见 - 即当我们使用捆绑包启动应用程序时,打开终端并输入
env
输出中缺少上述三个变量。
希望这将帮助其他人节省几天的研究时间并从头上拔毛;)