升级Xcode 15后Gradle构建iOS X64框架遇ld未知选项错误
Xcode 15构建iOS X64框架时链接器错误解决方案
升级至Xcode 15后,构建iOS X64目标框架时触发以下链接器错误:
ld: unknown options: -ios_simulator_version_min -sdk_version
参照KT-60230的建议,尝试在linkerOpts中添加"-ld64",但配置后仍出现相同错误,当前build.gradle.kts相关代码如下:
kotlin { ... var debugFrameworks: List<org.jetbrains.kotlin.gradle.plugin.mpp.Framework> = listOf() var releaseFrameworks: List<org.jetbrains.kotlin.gradle.plugin.mpp.Framework> = listOf() val iosArm32 = iosArm32("iosArm32") val iosArm64 = iosArm64("iosArm64") val iosX64 = iosX64("iosX64") configure(listOf(iosArm32, iosArm64, iosX64)) { binaries.framework("MyFrameworkName") { baseName = "[MyFrameworkName]" embedBitcode("bitcode") linkerOpts("-ld64") } debugFrameworks = debugFrameworks + binaries.getFramework("MyFrameworkName", "Debug") releaseFrameworks = releaseFrameworks + binaries.getFramework("MyFrameworkName", "Release") } val iosArm32Main by sourceSets val iosArm64Main by sourceSets val iosX64Main by sourceSets val iosMain by sourceSets.creating { dependsOn(sourceSets.commonMain.get()) iosArm32Main.dependsOn(this) iosArm64Main.dependsOn(this) iosX64Main.dependsOn(this) } val iosArm32Test by sourceSets val iosArm64Test by sourceSets val iosX64Test by sourceSets val iosTest by sourceSets.creating { dependsOn(sourceSets.commonTest.get()) iosArm32Test.dependsOn(this) iosArm64Test.dependsOn(this) iosX64Test.dependsOn(this) } }
修正方案
问题根源是Xcode 15对iOS X64模拟器默认使用ld64.lld链接器,Kotlin MPP传递的旧选项与该链接器不兼容,指定-ld64可强制切换回传统链接器。但需注意仅给X64目标添加该选项,真机目标无需配置:
kotlin { ... var debugFrameworks: List<org.jetbrains.kotlin.gradle.plugin.mpp.Framework> = listOf() var releaseFrameworks: List<org.jetbrains.kotlin.gradle.plugin.mpp.Framework> = listOf() val iosArm32 = iosArm32("iosArm32") val iosArm64 = iosArm64("iosArm64") val iosX64 = iosX64("iosX64") // 配置真机目标(无需-ld64) configure(listOf(iosArm32, iosArm64)) { binaries.framework("MyFrameworkName") { baseName = "[MyFrameworkName]" embedBitcode("bitcode") } debugFrameworks += binaries.getFramework("MyFrameworkName", "Debug") releaseFrameworks += binaries.getFramework("MyFrameworkName", "Release") } // 单独配置X64模拟器目标 configure(listOf(iosX64)) { binaries.framework("MyFrameworkName") { baseName = "[MyFrameworkName]" embedBitcode("bitcode") linkerOpts("-ld64") } debugFrameworks += binaries.getFramework("MyFrameworkName", "Debug") releaseFrameworks += binaries.getFramework("MyFrameworkName", "Release") } // SourceSets配置保持不变 val iosArm32Main by sourceSets val iosArm64Main by sourceSets val iosX64Main by sourceSets val iosMain by sourceSets.creating { dependsOn(sourceSets.commonMain.get()) iosArm32Main.dependsOn(this) iosArm64Main.dependsOn(this) iosX64Main.dependsOn(this) } val iosArm32Test by sourceSets val iosArm64Test by sourceSets val iosX64Test by sourceSets val iosTest by sourceSets.creating { dependsOn(sourceSets.commonTest.get()) iosArm32Test.dependsOn(this) iosArm64Test.dependsOn(this) iosX64Test.dependsOn(this) } }
额外建议
- 升级Kotlin Gradle插件至1.9.20及以上版本,新版本已内置适配Xcode 15链接器的逻辑,可能无需手动添加
-ld64。 - 执行
./gradlew clean清理构建缓存后重新构建,避免旧缓存残留导致的异常。
内容的提问来源于stack exchange,提问作者BenJacob
相关产品推荐
相关产品推荐

