多年来,一些用户询问如何构建在 macOS 中使用的 ImageMagick 的便携式版本 - 该版本不需要
brew
来安装它。想要这样做的原因是,您可以在未安装 brew
的系统中使用便携式版本,或者在旨在分发给未安装 brew
的用户的实用程序或应用程序中使用便携式版本。 Mark Setchel 在这里解决了早期版本的问题:
是否可以为 High Sierra/Mojave 编译静态/便携式版本的 ImageMagick?
我已经做了一些工作来更新当前的 macOS 版本,并将在此处发布答案。
答案似乎是这样;它可能不称职,但似乎有效,其中显示任何智能的所有内容都是 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
中创建符号链接: