From 86a9af73ae1d2f63da28579bfc377391644fb95d Mon Sep 17 00:00:00 2001 From: liyepan Date: Fri, 23 Oct 2026 14:49:30 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20v0.12.5=20=E2=80=94=E2=80=94=20=E4=BF=AE?= =?UTF-8?q?=20macOS=20=E4=BE=9D=E8=B5=96=E6=94=B6=E9=9B=86=E6=8A=8A=20dyli?= =?UTF-8?q?b=20=E8=87=AA=E5=B7=B1=E7=9A=84=20install=20name=20=E5=BD=93?= =?UTF-8?q?=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - otool -L 对 dylib 会先打印它自己的 install name(不是依赖), 之前脚本把它当依赖去 install_name_tool -change,改不动,所以一直报 「还有 20 个 Homebrew 依赖没处理」 - 现在先用 otool -D 读出 install name,用 -id 改成包内路径, 再处理真正的 /opt/homebrew 依赖;@rpath / 系统库直接跳过 --- packaging/macos/bundle-libs.sh | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/packaging/macos/bundle-libs.sh b/packaging/macos/bundle-libs.sh index 12b256e..070692d 100755 --- a/packaging/macos/bundle-libs.sh +++ b/packaging/macos/bundle-libs.sh @@ -1,6 +1,10 @@ #!/usr/bin/env bash # 把 .app 里引用到的 Homebrew 动态库收进 Contents/Frameworks,并把引用改成包内相对路径。 # Homebrew 的 Qt 会链到 /opt/homebrew 下的 libpng / freetype 等,macdeployqt 不会带它们。 +# +# 注意:dylib 的 otool -L 第一行是它自己的 install name(不是依赖),要单独用 -id 改, +# 否则会误当成依赖去 -change,改不动还一直报“没处理”。 +# # 用法: bundle-libs.sh set -euo pipefail @@ -22,8 +26,21 @@ while [ "$round" -lt 12 ]; do round=$((round + 1)) changed=0 while IFS= read -r file; do - [ -f "$file" ] || continue + # 先把这个文件自己的 install name 从 Homebrew 路径改掉 + self_id=$(otool -D "$file" 2>/dev/null | tail -n +2 | head -n1 || true) + if [ -n "$self_id" ]; then + case "$self_id" in + /opt/homebrew/*|/usr/local/*) + install_name_tool -id "@executable_path/../Frameworks/$(basename "$self_id")" "$file" 2>/dev/null || true + ;; + esac + fi + + # 再把真正依赖的 Homebrew dylib 收进来 while IFS= read -r dep; do + case "$dep" in + @*|/System/*|/usr/lib/*) continue ;; + esac case "$dep" in /opt/homebrew/*|/usr/local/*) base=$(basename "$dep")