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

MacOS下Android NDK缺失gold linker的解决及禁用Gradle使用方法

问题解决:Android NDK Mac平台gold linker缺失与Gradle强制使用gold linker的问题

一、如何获取Mac平台可用的gold linker?

  • Android NDK的Mac预编译包不自带gold linker,gold主要是为Linux平台的NDK提供的。你从官网下载的gold linker大概率是Linux版本,无法在Mac上运行。
  • 若一定要在Mac上使用gold,需要自行编译适配Mac的版本,但过程复杂且无官方支持,不推荐。NDK官方目前默认推荐使用LLD linker,其性能、兼容性都优于gold,建议直接切换到LLD。

二、阻止Gradle使用gold linker的方法

针对你遇到的clang++: error: invalid linker name in argument '-fuse-ld=gold'报错,可通过以下方式修改配置:

1. 修改CMakeLists.txt配置

  • 检查项目的CMakeLists.txt,若手动添加了-fuse-ld=gold参数,直接删除该行;
  • 若通过CMake变量设置了linker参数,比如CMAKE_EXE_LINKER_FLAGS或CMAKE_SHARED_LINKER_FLAGS,去掉其中的-fuse-ld=gold;
  • 也可以显式指定使用LLD,添加如下配置:
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=lld")
    set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=lld")
    

2. 修改Gradle构建脚本(app/build.gradle)

在android -> defaultConfig -> externalNativeBuild -> cmake中添加参数,强制指定linker:

android {
    defaultConfig {
        externalNativeBuild {
            cmake {
                // 传递参数给CMake,指定使用LLD
                arguments "-DANDROID_LD=lld", "-DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=lld"
            }
        }
    }
}

注:你看到的ANDROID_LD变量未被使用的警告,是因为之前的配置未被CMake正确接收,上述配置可确保参数生效。

3. 清理重建项目

执行以下命令清除旧构建缓存,再重新编译:

./gradlew clean

另外,若你使用的是SDL的默认Android配置,建议检查SDL自带的CMake脚本,确认是否有强制设置gold linker的逻辑,如有则修改对应配置项。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:07:27