@@ -48,31 +48,35 @@ jobs:
4848
4949 tmp_output=$(mktemp)
5050 ldd "$QEMU_BIN" > "$tmp_output" 2>&1
51-
52- cat "$tmp_output"
5351 missing_libs=$(grep "not found" "$tmp_output" | awk '{print $1}')
5452
55- echo "$missing_libs"
5653 mapfile -t all_libs < <(find /lib /usr/lib /usr/local/lib -type f -name "lib*.so*" 2>/dev/null)
5754
58- missing_libs=$(grep -oE "lib[^ ]+\.so[^ ]*" "$tmp_output" | sort -u)
59- [ -z "$missing_libs" ] && echo "❌ 无法解析缺失库,退出。" && exit 1
60-
61- echo "for lib in $missing_libs; do"
62-
63- # for lib in $missing_libs; do
64- # lib_prefix=$(echo "$lib" | sed 's/[0-9.]*$//') # 例如 libbrlapi.so.0.7 -> libbrlapi.so
65- # found=""
66- # for candidate in "${all_libs[@]}"; do
67- # [[ $(basename "$candidate") == $lib_prefix* ]] && found="$candidate" && break
68- # done
69-
70- # if [ -n "$found" ]; then
71- # link_path="$(dirname "$found")/$lib"
72- # [ -f "$link_path" ] || ln -s "$(basename "$found")" "$link_path" && echo "Linked: $lib"
73- # else
74- # echo "MISSING: $lib -> not found in system."
75- # exit 1
76- # fi
77- # done
55+ for lib in $missing_libs; do
56+ base_lib=$(echo "$lib" | sed -E 's/\.so.*/\.so/')
57+ found=""
58+
59+ for path in "${all_libs[@]}"; do
60+ if [[ $(basename "$path") == $base_lib* ]]; then
61+ found="$path"
62+ break
63+ fi
64+ done
7865
66+ if [ -n "$found" ]; then
67+ # 创建软连接到缺失的库名
68+ target_dir=$(dirname "$found")
69+ link_path="$target_dir/$lib"
70+ if [ -e "$link_path" ]; then
71+ echo "✅ 已存在软链接或库:$link_path"
72+ else
73+ echo "🔗 创建软链接:$link_path -> $(basename "$found")"
74+ sudo ln -s "$(basename "$found")" "$link_path"
75+ fi
76+ else
77+ echo "❌ 未找到用于修复 $lib 的基础库($base_lib),请手动安装。"
78+ exit 1
79+ fi
80+ done
81+ echo "✅ 所有缺失库已处理。"
82+ ./install/bin/qemu-system-riscv64 --version
0 commit comments