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

Apple M1 CLion编译gRPC C++架构不匹配如何配置CMake

问题原因
  • 架构配置变量放置位置错误:CMAKE_SYSTEM_PROCESSOR、CMAKE_SYSTEM_NAME、CMAKE_OSX_ARCHITECTURES这类平台检测相关的全局变量,必须放在project()命令之前声明。project()执行时会完成系统平台、架构的初始化检测,写在project()之后的配置不会生效,这是你配置不生效的核心原因。
  • 链接的gRPC库架构不匹配:你当前引用的/usr/local/Cellar/grpc/1.33.2_1/lib下的gRPC库是x86_64架构的,是Intel版本Homebrew安装的产物,Apple M1芯片原生的Homebrew默认安装路径为/opt/homebrew,安装的包才是arm64架构。
解决方案

1. 修正CMakeLists.txt配置

把架构相关配置移到最开头,修正后的配置参考如下:

cmake_minimum_required(VERSION 3.20)
# 所有平台架构相关配置必须放在project()之前
set(CMAKE_SYSTEM_NAME Darwin)
set(CMAKE_SYSTEM_PROCESSOR arm64)
set(CMAKE_OSX_ARCHITECTURES arm64)
set(CMAKE_CXX_STANDARD 17)

project(grpc_test)

# 替换为M1原生Homebrew安装的openssl路径,版本号对应你实际安装的版本即可
set(OPENSSL_ROOT_DIR /opt/homebrew/Cellar/openssl@1.1/1.1.1i)
set(OPENSSL_INCLUDE_DIR /opt/homebrew/Cellar/openssl@1.1/1.1.1i/include)

find_package(PkgConfig REQUIRED)
# 推荐直接用find_package管理依赖,避免手动指定路径出错
find_package(Protobuf REQUIRED)
find_package(gRPC REQUIRED)

add_executable(grpc_test main.cpp svc.grpc.pb.cc svc.pb.cc)

target_include_directories(grpc_test PUBLIC ./ /opt/homebrew/include)
# 替换为M1原生Homebrew安装的grpc路径,版本号对应你实际安装的版本即可
target_link_directories(grpc_test PUBLIC /opt/homebrew/Cellar/grpc/1.33.2_1/lib)
target_link_libraries(grpc_test grpc++)

message(STATUS "archs is " ${CMAKE_OSX_ARCHITECTURES})

2. 安装arm64架构的依赖包

使用M1原生Homebrew重新安装所需依赖:
/opt/homebrew/bin/brew install grpc openssl protobuf
如果你的终端默认已经是原生arm64环境,直接执行brew install grpc openssl protobuf即可。

3. 清空CMake缓存重生成

CLion中点击菜单栏File -> Invalidate Caches...,选择清除缓存并重启,或者手动删除项目下的cmake-build-debug文件夹,之后重新加载CMake项目再构建即可。

如果不需要原生arm64构建,也可以将CMAKE_OSX_ARCHITECTURES改为x86_64,直接通过Rosetta转译运行,不需要替换依赖包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:15:04