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.pswp.cn/pingmian/88767.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/88767.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/88767.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

暑期自學嵌入式——Day01(C語言階段)

點關注不迷路喲。你的點贊、收藏,一鍵三連,是我持續更新的動力喲!!! 主頁: 一位搞嵌入式的 genius-CSDN博客https://blog.csdn.net/m0_73589512?spm1011.2682.3001.5343感悟: 今天我認為最重…

Flutter基礎(前端教程⑧-數據模型)

這個示例展示了如何創建數據模型、解析 JSON 數據,以及在 UI 中使用這些數據:import package:flutter/material.dart; import dart:convert;void main() {// 示例:手動創建User對象final user User(id: 1,name: 張三,age: 25,email: zhangsa…

SSRF10 各種限制繞過之30x跳轉繞過協議限制

ssrf漏洞在廠商的處理下可能進行一些特殊處理導致我們無法直接利用漏洞 有以下四種: 1.ip地址限制繞過 2.域名限制繞過 3.30x跳轉繞過域名限制 4.DNS rebinding繞過內網ip限制 本章我們講30x跳轉繞過域名限制 30x跳轉繞過域名限制 之前我們使用ssrf漏洞時可以…

DNS解析過程和nmap端口掃描

目錄 DNS解析流程: nmap端口掃描 指定掃描方式 TCP全連接掃描 -sT SYN半連接掃描 -sS -sT和 -sS的區別 Linux提權 利用好谷歌語法查找敏感信息 如果自己搭建了網站文件要放在phpstudy_pro\WWW下。 如果想要使用域名訪問網站,需要在phpstudy_pro…

【基于開源大模型(如deepseek)開發應用及其發展趨勢的一點思考】

1. 開源大模型技術發展現狀1.1 DeepSeek等主流開源大模型的技術特性分析 DeepSeek作為當前最具代表性的開源大模型之一,其技術架構具有多項創新特性。該模型采用混合專家架構(MoE),通過將視覺編碼分離為"理解"和"生成"兩條路徑&…

java8 ConcurrentHashMap 桶級別鎖實現機制

Java 8 ConcurrentHashMap 桶級別鎖實現機制 Java 8 中的 ConcurrentHashMap 拋棄了分段鎖設計,采用了更細粒度的桶級別鎖(bucket-level locking)實現,這是其并發性能提升的關鍵。下面詳細解析其實現原理: 1. 基本實現…

Python正則表達式實戰指南

一 正則表達式庫正則表達式是文本處理中不可或缺的強大工具,Python通過re模塊提供了完整的正則表達式支持。本文將詳細介紹re模塊中最常用的match()、search()和findall()函數,以及貪婪模式與非貪婪模式的區別,幫助讀者掌握Python中正則表達式…

使用球體模型模擬相機成像:地面與天空的可見性判斷與紋理映射

在傳統相機模擬中,地面通常被建模為一個平面(Plane),這在低空場景下是合理的。但在更大視場范圍或遠距觀察時,地球的曲率不可忽視。因此,我們需要將地面模型從平面升級為球體,并基于球面與光線的…

Agent自動化與代碼智能

核心問題: 現在很多團隊做AI系統有個大毛病:只顧追求“高大上”的新技術(尤其是AI Agent),不管實際業務需不需要。 結果系統搞得又貴、又復雜、還容易出錯。大家被“Agent”這個概念搞暈了:到底啥時候用簡單…

SQL141 試卷完成數同比2020年的增長率及排名變化

SQL141 試卷完成數同比2020年的增長率及排名變化 withtemp as (selectexam_id,tag,date(submit_time) as submit_timefromexamination_infoleft join exam_record using (exam_id)wheresubmit_time is not null),2021_temp as (selecttag,count(*) as exam_cnt_21,rank() over…

C語言<數據結構-單鏈表>

鏈表是一種常見且重要的數據結構,在 C 語言中,它通過指針將一系列的節點連接起來,每個節點可以存儲不同類型的數據。相比數組,鏈表在插入和刪除元素時不需要移動大量數據,具有更好的靈活性,尤其適合處理動態…

archive/tar: unknown file mode ?rwxr-xr-x

這個是我在docker build報錯的,這是一個node.js項目。我猜你也是一個node.js下的項目,或者前端項目。 解決方法: .dockerignore里面寫一下node_modules就行了。 未能解決:archive/tar:未知文件模式?rwxr-…

【前端】ikun-markdown: 純js實現markdown到富文本html的轉換庫

文章目錄背景界面當前支持的 Markdown 語法不支持的Markdown 語法代碼節選背景 出于興趣,我使用js實現了一個 markdown語法 -> ast語法樹 -> html富文本的庫, 其速度應當慢于正則實現的同類js庫, 但是語法擴展性更好, 嵌套列表處理起來更方便. 界面 基于此js實現vue組…

【echarts踩坑記錄】為什么第二個Y軸最大值不整潔

目錄問題復現示意圖:解決方法有以下幾種:1. 在y軸配置中手動設置max屬性:2. 使用ECharts提供的坐標軸標簽格式化功能:🚀寫在最后問題復現示意圖: 今天在用echarts圖表的時候,出現了一個小問題。…

Duplicate cleaner pro 的使用技巧

Duplicate cleaner pro 的使用技巧前言文件去重基本介紹經驗之談目錄結構修改盤符起因方法手動分配方法?數據修改方法安裝sqlite-web修改數據庫GPU加速安裝驅動獲取驅動和硬件信息安裝CUDA配置環境變量&#xff08;如果是自定義安裝&#xff09;創建程序<1>獲取參數和命…

數字孿生技術引領UI前端設計新趨勢:增強現實與虛擬現實的融合應用

hello寶子們...我們是艾斯視覺擅長ui設計和前端數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩!一、引言&#xff1a;AR 與 VR 的 “割裂” 與數字孿生的 “融合” 契機增強現實&#xff08;AR&…

Qt使用dump文件記錄并查找軟件奔潰信息詳細教程

Qt使用dump文件記錄并查找軟件奔潰信息一、dump文件概述1、dump文件的基本概念2、dump文件的常見類型3、dump文件的分析工具4、dump文件的應用場景二、具體實現步驟1、下載dbghelp庫2、將庫添加到自己的工程中3、main.cpp添加代碼記錄奔潰日志4、編寫測試代碼5、測試6、結果查看…

UI前端與數字孿生結合案例分享:智慧城市的智慧能源管理系統

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩!一、引言&#xff1a;能源管理的 “數字孿生革命”智慧城市的能源系統正面臨 “供需失衡、損耗…

Android 16系統源碼_SplashScreen窗口的創建流程(一)

一 點擊桌面圖標觸發SplashScreen 1.1 點擊桌面圖標打開應用 點擊桌面的短信圖標&#xff0c;然后打開短信頁面&#xff0c;使用winscope獲取數據。從點擊短信圖標到應用內容完全展開&#xff0c;中間有出現一個標題帶有“Splash Screen”字符串的窗口。 二 Splash Screen窗口創…

線性代數學習筆記

矩陣 矩陣是一種非常重要的數學對象,它通常由一個由數字排成的矩形陣列來定義。一個矩陣由若干行和若干列組成,被稱為矩陣的行數和列數。一般情況下,矩陣的行數和列數分別用 n n n 和 m m m 表示。<