Gradle在Apple M1上构建NativeLibrarySpec等原生组件失败解决方案
问题根因
旧版Gradle的Native Component Model插件未适配Apple M1系列(Apple Silicon)芯片,自动检测宿主平台时会生成无效标识osx_arm-v8,该标识不在插件内置的支持平台列表中,直接触发配置异常,导致构建失败。
可行修复方案
- 显式指定x86_64构建目标(改造成本最低)
无需升级Gradle版本,直接在build.gradle的model块中手动声明目标平台,强制构建x86_64架构二进制,生成的产物可通过Rosetta 2在M系列芯片Mac上正常运行。修改后的配置示例:
plugins { id 'cpp' } model { // 手动定义macOS x86_64平台 platforms { x64 { architecture "x86_64" operatingSystem "osx" } } components { hello(NativeExecutableSpec) { targetPlatform "x64" // 绑定组件到指定平台 sources { cpp { source { srcDir "src/cpp" include "hello.cc" } } } } } }
- 升级Gradle使用新版原生构建插件
旧版基于software model的Native Component插件已停止维护,Gradle 7.0及以上版本搭载的新版原生编译插件已原生支持Apple Silicon arm64架构。如果需要构建原生arm64版本的二进制,可将Gradle升级到7.0+,迁移到官方维护的cpp-application插件,最简配置如下:
plugins { id 'cpp-application' } application { source.from file("src/cpp/hello.cc") }
该配置会自动识别当前M系列芯片的arm64平台,直接构建可原生运行的二进制文件,不会再出现平台识别错误。
- 通过Rosetta 2在x86_64环境下构建
若不想修改现有构建配置,可给终端开启Rosetta运行权限,搭配x86_64版本的JDK、Gradle执行构建,此时插件会正确识别平台为osx_x86-64,可正常完成编译。
内容的提问来源于stack exchange,提问作者Alexander Pushkarev
相关产品推荐
相关产品推荐

