如何制作可移植的 macOS 版本的 ImageMagick? [已关闭]

问题描述 投票:0回答:1

多年来,一些用户询问如何构建在 macOS 中使用的 ImageMagick 的便携式版本 - 该版本不需要

brew
来安装它。想要这样做的原因是,您可以在未安装
brew
的系统中使用便携式版本,或者在旨在分发给未安装
brew
的用户的实用程序或应用程序中使用便携式版本。 Mark Setchel 在这里解决了早期版本的问题:

是否可以为 High Sierra/Mojave 编译静态/便携式版本的 ImageMagick?

我已经做了一些工作来更新当前的 macOS 版本,并将在此处发布答案。

imagemagick
1个回答
2
投票

答案似乎是这样;它可能不称职,但似乎有效,其中显示任何智能的所有内容都是 Mark Setchell 的作品。

如何为 macOS 构建便携式 ImageMagick:

您将需要

brew
,但不要从brew安装
imagemagick
,因为如果存在brew版本,则不会构建便携式版本。

从brew安装这些软件包(可能不需要全部,但安装它们也没什么坏处)

brew install cmake jpeg dylibbundler webp openexr little-cms2 pkg-config glib fontconfig ghostscript freetype gettext libzip libraqm libheif jbigkit pango libraw libwmf djvulibre pango librsvg

安装

liblqr

https://github.com/carlobaldassi/liblqr 下载代码 cd 进入 liblqr 目录

./configure && make 
sudo /usr/bin/install -c lqr/.libs/liblqr-1.0.dylib /usr/local/lib/liblqr-1.0.dylib 

安装

jxl

从任何方便的目录开始

git clone https://github.com/libjxl/libjxl.git --recursive --shallow-submodules

在 Intel 和 ARM Monterey 上: 通过注释掉(或删除)以下行来编辑

libjxl/lib/jxl_cms.cmake
libjxl/lib/jxl.cmake

set(LINKER_EXCLUDE_LIBS_FLAG "-Wl,--exclude-libs=ALL")

cd libjxl
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF ..
cmake --build . -- -j$(nproc)
sudo cmake --install .

现在将 CD 放入您的用户目录或其他方便的目录。

git clone https://github.com/ImageMagick/ImageMagick.git ImageMagick-7.1.1
cd ImageMagick-7.1.1

在 Apple Silicon 上:

make distclean
./configure \
   CC=clang \
   CFLAGS="-O3" \
   CXX=clang++ \
   CXXFLAGS="-std=c++11 -O3 -march=native"  \
   LDFLAGS="-L/opt/homebrew/opt/jpeg/lib"  \
   CPPFLAGS="-I/opt/homebrew/opt/jpeg/include" \
   --disable-dependency-tracking \
   --without-x \
   --without-magick-plus-plus \
   --disable-shared \
   --enable-static
# check things before copying and pasting the next bit
exit
make -j 8 

关于英特尔:

make distclean
./configure \
   CC=clang \
   CFLAGS="-O3" \
   CXX=clang++ \
   CXXFLAGS="-std=c++11 -O3 -march=native"  \
   LDFLAGS="-L/usr/local/opt/jpeg/lib"  \
   CPPFLAGS="-I/usr/local/opt/jpeg/include" \
   --disable-dependency-tracking \
   --without-x \
   --without-magick-plus-plus \
   --disable-shared \
   --enable-static
# check things before copying and pasting the next bit
exit
make -j 8 

可执行文件

magick
将位于
utilities
文件夹中;如果运行它,您可能会收到一条错误消息。为了避免这种情况,请在您的系统上找到一个简单的应用程序;复印一份;重命名副本
Magick.app
。将
Contents/MacOS
中的可执行文件替换为
magick
。编辑
info.plist
文件以使用
magick
而不是原始可执行文件。删除任何其他不相关的内容。

您创建的应用程序在您单击时不会执行任何操作!它仅作为可执行文件及其所需库的容器而存在!

cd 到您创建的包含

Magick.app
的目录。

在运行下面的

dylibbundler
命令之前,请记住,系统可能会提示您输入 libjxl 库的位置;如果发生这种情况,请输入:
/usr/local/lib

在 Apple Silicon 上:

dylibbundler -od -of -b -x ./Magick.app/Contents/MacOS/magick -d ./Magick.app/Contents/libs-arm/ -p @executable_path/../libs-arm/

在 Ventura 或更高版本下,您可能需要添加

-ns
参数以避免出现错误消息

关于英特尔:

dylibbundler -od -of -b -x ./Magick.app/Contents/MacOS/magick -d ./Magick.app/Contents/libs-intel/ -p @executable_path/../libs-intel/

现在从命令行使用应用程序中的

magick
可执行文件。您可以在
/usr/local/bin
中创建指向它的符号链接,以便无需输入路径即可使用
magick

如果您想构建通用应用程序,请在 Intel 和 Apple Silicon 上构建并使用

lipo
组合
magick
可执行文件。确保通用应用程序中包含
libs-arm
libs-intel
文件夹。

编辑:我已经发布了一个 DMG,其中包含该应用程序的经过公证的通用版本和一个安装程序脚本,该脚本将其移动到“应用程序”文件夹中并在

/usr/local/lib
中创建符号链接:

https://mendelson.org/PortableImageMagickInstaller.dmg

© www.soinside.com 2019 - 2024. All rights reserved.