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

升级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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 02:16:07