You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Conan在macOS上如何处理x86与arm64通用(Universal)构建?

在macOS上用Conan构建Universal(Fat)二进制文件

核心机制说明

Conan本身不直接生成fat二进制,而是先为每个目标架构单独编译依赖,再借助macOS系统的lipo工具合并多架构二进制。Conan 2.x对Universal构建做了集成支持,1.x版本则需要手动或脚本辅助完成合并。

Conan 2.x 实现步骤

配置多架构构建

可以通过profile文件或命令行参数指定要构建的架构:

  • Profile方式:创建或修改Conan profile文件(比如universal.profile):
    [settings]
    os=Macos
    arch=armv8, x86_64
    
    执行安装命令时指定该profile:
    conan install . --profile=universal.profile --build=missing
    
  • 命令行直接指定:
    conan install . --settings os=Macos --settings arch=armv8,x86_64 --build=missing
    

项目构建配置

如果是CMake项目,需要在CMakeLists.txt中明确指定通用架构,确保最终应用也生成fat二进制:

set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE)

验证结果

构建完成后,用lipo命令检查生成的库或可执行文件:

lipo -info path/to/your/library.dylib

正常输出会包含arm64和x86_64两种架构标识。

Conan 1.x 实现步骤

1.x版本没有原生多架构合并支持,需要分三步操作:

  1. 分别编译不同架构的依赖
    先编译arm64版本:
    conan install . -s os=Macos -s arch=armv8 --build=missing
    
    再编译x86_64版本(M1机器上会自动用Rosetta 2转译):
    conan install . -s os=Macos -s arch=x86_64 --build=missing
    
  2. 手动合并二进制
    用lipo工具逐个合并依赖库,示例:
    lipo -create ./build-arm64/lib/libfoo.dylib ./build-x86_64/lib/libfoo.dylib -output ./build-universal/lib/libfoo.dylib
    
    可以编写Shell脚本批量处理所有依赖文件。
  3. 项目编译配置
    同样在CMakeLists.txt中设置通用架构:
    set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE)
    

关键注意事项

  • 确认所有第三方依赖都支持arm64架构,部分老旧库可能需要调整编译脚本才能兼容。
  • 远程仓库若无对应架构的预编译包,务必加上--build=missing参数强制本地编译。
  • M1机器上编译x86_64架构依赖时,会自动通过Rosetta 2转译,编译速度会比原生arm64慢一些。

内容的提问来源于stack exchange,提问作者Kapitan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 22:10:13