Apple M1设备上IntelliJ IDEA中Kotlin/Native Hello World无输出问题
Kotlin/Native项目在Apple M1设备上IntelliJ运行无输出的解决办法
问题场景
使用IntelliJ IDEA 2022.2.3(社区版),通过Kotlin Native应用模板创建项目,Gradle依赖kotlin("multiplatform") version "1.7.20"。项目核心代码仅包含打印Hello World的main函数:
fun main() { println("Hello, Kotlin/Native!") }
在IDE中构建项目显示成功,但看不到Hello World输出,运行面板显示> Task :runDebugExecutableNative SKIPPED(灰色标识)。手动在命令行运行构建生成的Kasha.kexe可正常输出内容,仅IDE内运行无结果。
问题原因
问题出在Apple M1(Apple Silicon)设备的架构适配:模板生成的Gradle配置默认将Mac OS X设备的目标架构设为macosX64(Intel架构),但M1是Arm64架构,导致IDE无法找到匹配架构的可执行文件,因此跳过了run任务。
模板默认配置片段:
kotlin { val hostOs = System.getProperty("os.name") val isMingwX64 = hostOs.startsWith("Windows") val nativeTarget = when { hostOs == "Mac OS X" -> macosX64("native") hostOs == "Linux" -> linuxX64("native") isMingwX64 -> mingwX64("native") else -> throw GradleException("Host OS is not supported in Kotlin/Native.") } // ... 其他配置 }
解决方案
1. 针对M1设备单独修改
直接将macosX64替换为macosArm64,修改后的配置:
kotlin { val hostOs = System.getProperty("os.name") val isMingwX64 = hostOs.startsWith("Windows") val nativeTarget = when { hostOs == "Mac OS X" -> macosArm64("native") hostOs == "Linux" -> linuxX64("native") isMingwX64 -> mingwX64("native") else -> throw GradleException("Host OS is not supported in Kotlin/Native.") } // ... 其他配置 }
修改后重新同步Gradle,即可在IDE中正常运行并看到输出。
2. 兼容Intel和Apple Silicon设备的通用配置
如果需要项目同时在Intel Mac和M1 Mac上运行,可通过判断系统架构动态设置目标:
kotlin { val hostOs = System.getProperty("os.name") val osArch = System.getProperty("os.arch") val isMingwX64 = hostOs.startsWith("Windows") val nativeTarget = when { hostOs == "Mac OS X" -> if (osArch == "aarch64") macosArm64("native") else macosX64("native") hostOs == "Linux" -> linuxX64("native") isMingwX64 -> mingwX64("native") else -> throw GradleException("Host OS is not supported in Kotlin/Native.") } // ... 其他配置 }
关于Intel设备兼容性的说明
如果直接将配置固定为macosArm64,Intel架构的Mac设备构建项目时会失败——因为目标架构与设备硬件不匹配。因此推荐使用通用配置,让Gradle根据当前设备的架构自动选择对应的目标平台,同时兼容两种Mac设备。
内容的提问来源于stack exchange,提问作者Grzegorz Adam Hankiewicz
相关产品推荐
相关产品推荐

