当前位置: 首页 > news >正文

libimagequant 在 mac 平台编译双架构

在 macOS 上编译 libimagequant 的双架构(aarch64 + x86_64)通用二进制库,以下是完整步骤:


​1. 准备 Rust 工具链​

# 安装两个目标平台
rustup target add aarch64-apple-darwin x86_64-apple-darwin# 确认安装成功
rustup target list --installed
# 应输出:aarch64-apple-darwin, x86_64-apple-darwin

​2. 分别编译两个架构​

​编译 ARM64 架构 (M1/M2)​
cd /Users/admin/open_lib/libimagequant/imagequant-sys
cargo build --release --target aarch64-apple-darwin
​编译 x86_64 架构 (Intel)​
cargo build --release --target x86_64-apple-darwin

​3. 合并为通用二进制 (Universal Binary)​

# 创建输出目录
mkdir -p target/universal# 使用 lipo 合并静态库
lipo -create \-output target/universal/libimagequant.a \target/aarch64-apple-darwin/release/libimagequant_sys.a \target/x86_64-apple-darwin/release/libimagequant_sys.a# 验证合并结果
lipo -info target/universal/libimagequant.a
# 应输出:Architectures in the fat file: target/universal/libimagequant.a are: x86_64 arm64 

​4. 配置 Cargo 自动构建 (可选)​

imagequant-sys/Cargo.toml 中添加构建脚本配置:

[package]
build = "build.rs"[target.'cfg(target_os = "macos")'.dependencies]
libc = "0.2"

build.rs 中添加:

fn main() {println!("cargo:rerun-if-changed=build.rs");#[cfg(target_os = "macos")]{println!("cargo:rustc-link-search=native=target/universal");println!("cargo:rustc-link-lib=static=imagequant");}
}

​5. 验证最终库​

# 检查文件类型
file target/universal/libimagequant.a
# 应显示:Mach-O universal binary with 2 architectures# 检查符号表
nm -arch arm64 target/universal/libimagequant.a | head
nm -arch x86_64 target/universal/libimagequant.a | head

​6. 清理与重建​

# 完全清理后重建
cargo clean
cargo build --release --target aarch64-apple-darwin
cargo build --release --target x86_64-apple-darwin
lipo -create ... # 重复步骤3

​常见问题解决​

  1. lipo 报错 "has same architecture"​
    删除旧库再合并:
rm target/universal/libimagequant.a
  1. ​缺少 core/std 错误​
    确保工具链完整:
rustup component add rust-src
  1. ​Xcode 兼容性问题​
    更新命令行工具:
xcode-select --install

​最终目录结构​

libimagequant/
├── target/
│   ├── aarch64-apple-darwin/
│   ├── x86_64-apple-darwin/
│   └── universal/
│       └── libimagequant.a  # 通用二进制
└── imagequant-sys/└── target/...           # 子项目构建目录

通过以上步骤,你将获得一个同时支持 Intel 和 Apple Silicon 的静态库,可直接用于跨平台分发。

全流程记录

# 1. 进入项目目录
cd /Users/admin/open_lib/libimagequant/imagequant-sys# 2. 清理并编译ARM64架构 (M1/M2)
cargo clean && cargo build --target aarch64-apple-darwin
# 输出示例:
# Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 41s# 3. 验证ARM64二进制
cd ../target/aarch64-apple-darwin/debug
lipo -info libimagequant_sys.a
# 应输出:Non-fat file: libimagequant_sys.a is architecture: arm64# 4. 返回项目目录编译x86_64架构 (Intel)
cd ../../../../imagequant-sys
cargo build --release --target x86_64-apple-darwin
# 输出示例:
# Finished `release` profile [optimized] target(s) in 6.58s# 5. 验证x86_64二进制
cd ../target/x86_64-apple-darwin/release
lipo -info libimagequant_sys.a
# 应输出:Non-fat file: libimagequant_sys.a is architecture: x86_64# 6. 创建通用二进制
cd ../../..
mkdir -p universal
lipo -create \target/aarch64-apple-darwin/debug/libimagequant_sys.a \target/x86_64-apple-darwin/release/libimagequant_sys.a \-output universal/libimagequant_universal.a# 7. 最终验证
lipo -info universal/libimagequant_universal.a
# 应输出:Architectures in the fat file: universal/libimagequant_universal.a are: arm64 x86_64
http://www.lryc.cn/news/583969.html

相关文章:

  • 2025.07.09华为机考真题解析-第一题100分
  • SPGAN: Siamese projection Generative Adversarial Networks
  • 如何发现 Redis 中的 BigKey?
  • 速盾:高防CDN开发中的常见问题?
  • CANFD记录仪设备在无人驾驶快递车的应用
  • 数据同步平台部署指南
  • WebUI自动化知识点总结-基于Java语言
  • 解锁医疗新视界:医患共决策时间轴AI可视化工具
  • Flutter多线程机制深度解析
  • 【计算机基础理论知识】C++篇(二)
  • 利萨如图形详解:原理与Python动态绘制
  • 配置双网卡Linux主机作为路由器(连接NAT网络和仅主机模式网络)
  • pharokka phold--快速噬菌体注释工具
  • FeatherScan v4.0 – 适用于Linux的全自动内网信息收集工具
  • 基于大数据的电力系统故障诊断技术研究
  • LINUX710 MYSQL
  • 大数据学习6:Sqoop数据迁移工具
  • linux-用户与用户组管理
  • 时序数据库InfluxDB
  • 初学者对编译和链接的学习笔记(含预编译详解)
  • 量子计算能为我们做什么?
  • Linux之Tomcat WEB核心摘要
  • Unity3D iOS闪退问题解决方案
  • C++交叉编译工具链制作以及QT交叉编译环境配置
  • 安全访问云端内部应用:用frp的stcp功能解决SSH转发的痛点
  • 探索 Google NotebookLM:AI 驱动的效率提升新利器
  • MySQL事务实现原理
  • 低频低压减载装置
  • 构建分布式光伏“四可”能力:支撑新型电力系统安全稳定运行的关键路径
  • turbopack打包机制