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
相关产品推荐
相关产品推荐

