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

React Native源码编译Yoga模块报错:依赖文件路径异常求助

问题:编译React Native源码时Yoga模块出现依赖文件路径异常报错

我为了使用自行修改的Camera Roll功能,尝试从源码编译React Native。已遵循官方编译指南操作,但编译全程遇到晦涩的Yoga模块报错,核心问题是生成的依赖文件路径明显异常(路径里重复了绝对路径,还出现了__这样的错误拼接),完整报错信息如下:

[armeabi-v7a] Compile++ thumb: yogacore <= Utils.cpp
[armeabi-v7a] Compile++ thumb: yogacore <= YGEnums.cpp
[armeabi-v7a] Compile++ thumb: yogacore <= YGNodePrint.cpp
[armeabi-v7a] Compile++ thumb: yogacore <= YGNode.cpp
[armeabi-v7a] Compile++ thumb: yogacore <= Yoga.cpp
C:/Users/jon-g/OneDrive/Documents/GitHub/kulaapp/node_modules/react-native/ReactAndroid/../ReactCommon/yoga/yoga/YGEnums.cpp:228:1: fatal error: opening dependency file C:\Users\jon-g\OneDrive\Documents\GitHub\kulaapp\node_modules\react-native\ReactAndroid\build\tmp\buildReactNdkLib/local/armeabi-v7a/objs/yogacore/C_/Users/jon-g/OneDrive/Documents/GitHub/kulaapp/node_modules/react-native/ReactAndroid/__/ReactCommon/yoga/yoga/YGEnums.o.d: No such file or directory
}
^
compilation terminated.
make.exe: *** [C:\Users\jon-g\OneDrive\Documents\GitHub\kulaapp\node_modules\react-native\ReactAndroid\build\tmp\buildReactNdkLib/local/armeabi-v7a/objs/yogacore/C_/Users/jon-g/OneDrive/Documents/GitHub/kulaapp/node_modules/react-native/ReactAndroid/__/ReactCommon/yoga/yoga/YGEnums.o] Error 1
make.exe: *** Waiting for unfinished jobs....
[armeabi-v7a] StaticLibrary : libreactnative.a
C:/Users/jon-g/OneDrive/Documents/GitHub/kulaapp/node_modules/react-native/ReactAndroid/../ReactCommon/yoga/yoga/YGNodePrint.cpp:227:1: fatal error: opening dependency file C:\Users\jon-g\OneDrive\Documents\GitHub\kulaapp\node_modules\react-native\ReactAndroid\build\tmp\buildReactNdkLib/local/armeabi-v7a/objs/yogacore/C_/Users/jon-g/OneDrive/Documents/GitHub/kulaapp/node_modules/react-native/ReactAndroid/__/ReactCommon/yoga/yoga/YGNodePrint.o.d: No such file or directory
} // namespace facebook
^
compilation terminated.
make.exe: *** [C:\Users\jon-g\OneDrive\Documents\GitHub\kulaapp\node_modules\react-native\ReactAndroid\build\tmp\buildReactNdkLib/local/armeabi-v7a/objs/yogacore/C_/Users/jon-g/OneDrive/Documents/GitHub/kulaapp/node_modules/react-native/ReactAndroid/__/ReactCommon/yoga/yoga/YGNodePrint.o] Error 1
C:/Users/jon-g/OneDrive/Documents/GitHub/kulaapp/node_modules/react-native/ReactAndroid/../ReactCommon/yoga/yoga/Utils.cpp:31:1: fatal error: opening dependency file C:\Users\jon-g\OneDrive\Documents\GitHub\kulaapp\node_modules\react-native\ReactAndroid\build\tmp\buildReactNdkLib/local/armeabi-v7a/objs/yogacore/C_/Users/jon-g/OneDrive/Documents/GitHub/kulaapp/node_modules/react-native/ReactAndroid/__/ReactCommon/yoga/yoga/Utils.o.d: No such file or directory
}
^
compilation terminated.
make.exe: *** [C:\Users\jon-g\OneDrive\Documents\GitHub\kulaapp\node_modules\react-native\ReactAndroid\build\tmp\buildReactNdkLib/local/armeabi-v7a/objs/yogacore/C_/Users/jon-g/OneDrive/Documents/GitHub/kulaapp/node_modules/react-native/ReactAndroid/__/ReactCommon/yoga/yoga/Utils.o] Error 1
C:/Users/jon-g/OneDrive/Documents/GitHub/kulaapp/node_modules/react-native/ReactAndroid/../ReactCommon/yoga/yoga/YGNode.cpp:668:1: fatal error: opening dependency file C:\Users\jon-g\OneDrive\Documents\GitHub\kulaapp\node_modules\react-native\ReactAndroid\build\tmp\buildReactNdkLib/local/armeabi-v7a/objs/yogacore/C_/Users/jon-g/OneDrive/Documents/GitHub/kulaapp/node_modules/react-native/ReactAndroid/__/ReactCommon/yoga/yoga/YGNode.o.d: No such file or directory
}
^
compilation terminated.
make.exe: *** [C:\Users\jon-g\OneDrive\Documents\GitHub\kulaapp\node_modules\react-native\ReactAndroid\build\tmp\buildReactNdkLib/local/armeabi-v7a/objs/yogacore/C_/Users/jon-g/OneDrive/Documents/GitHub/kulaapp/node_modules/react-native/ReactAndroid/__/ReactCommon/yoga/yoga/YGNode.o] Error 1
C:/Users/jon-g/OneDrive/Documents/GitHub/kulaapp/node_modules/react-native/ReactAndroid/../ReactCommon/yoga/yoga/Yoga.cpp:3493:1: fatal error: opening dependency file C:\Users\jon-g\OneDrive\Documents\GitHub\kulaapp\node_modules\react-native\ReactAndroid\build\tmp\buildReactNdkLib/local/armeabi-v7a/objs/yogacore/C_/Users/jon-g/OneDrive/Documents/GitHub/kulaapp/node_modules/react-native/ReactAndroid/__/ReactCommon/yoga/yoga/Yoga.o.d: No such file or directory
}
^
compilation terminated.
make.exe: *** [C:\Users\jon-g\OneDrive\Documents\GitHub\kulaapp\node_modules\react-native\ReactAndroid\build\tmp\buildReactNdkLib/local/armeabi-v7a/objs/yogacore/C_/Users/jon-g/OneDrive/Documents/GitHub/kulaapp/node_modules/react-native/ReactAndroid/__/ReactCommon/yoga/yoga/Yoga.o] Error 1
make.exe: Leaving directory `C:/Users/jon-g/OneDrive/Documents/GitHub/kulaapp/node_modules/react-native/ReactAndroid/src/main/jni/react/jni'
:ReactAndroid:buildReactNdkLib FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':ReactAndroid:buildReactNdkLib'.
> Process 'command 'C:\Users\jon-g\AppData\Local\Android\Ndk\android-ndk-r10e\ndk-build.cmd'' finished with non-zero exit value 2
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED

我无法理解问题原因,请问该如何解决以完成编译?


解决方案

这个问题本质是Windows路径下NDK构建工具对相对路径转绝对路径时的拼接错误,尤其是你的项目放在OneDrive目录下(旧版NDK对这类同步目录的路径处理存在bug),结合报错里的路径重复(C_/Users/...和__),给你几个逐步排查的解决方法:

方法1:移动项目到非OneDrive、无空格的短路径目录

NDK r10e是比较旧的版本(很多React Native旧版本依赖它),对Windows的特殊目录(比如OneDrive、带空格的用户目录)支持很差,路径拼接时会把相对路径../错误转换成__,同时把盘符C:错误转成C_。

  • 把你的项目从C:\Users\jon-g\OneDrive\Documents\GitHub\kulaapp移动到比如C:\dev\kulaapp这样的短路径、非同步目录下
  • 清空之前的构建缓存:
    cd 项目根目录
    gradlew clean
    rm -rf node_modules/.cache
    rm -rf android/build
    
  • 重新执行编译命令

这是最直接有效的方法,很多RN旧版本编译的Windows路径问题都能这么解决。

方法2:升级NDK版本(谨慎操作,需适配RN版本)

如果你不想移动项目,可以尝试升级NDK到更高版本(比如r16b或r17c,这些版本对Windows路径的处理更完善),但要注意:

  • 旧版本的React Native(比如0.5x及以下)可能依赖特定版本的NDK,升级后可能出现其他兼容性问题
  • 修改React Android模块的NDK配置:
    1. 打开node_modules/react-native/ReactAndroid/build.gradle
    2. 找到ndkVersion配置项,替换成你安装的高版本NDK编号
    3. 清空构建缓存后重新编译

方法3:手动修复Yoga模块的路径配置

如果上面两种方法都不行,你可以手动调整Yoga的NDK构建脚本,修正路径拼接:

  1. 打开node_modules/react-native/ReactCommon/yoga/yoga/Android.mk
  2. 找到LOCAL_SRC_FILES对应的路径,把相对路径../替换成绝对路径,或者调整为相对于ReactAndroid目录的路径
  3. 保存后清空缓存重新编译

不过这种方法需要对NDK构建脚本有一定了解,而且每次重新安装依赖后都要重新修改,比较麻烦。

额外提示

  • 确保你的Windows用户名没有空格或特殊字符(比如jon-g是没问题的,但如果是Jon Doe就容易出问题)
  • 编译时尽量用Git Bash或者PowerShell,避免用Windows自带的命令提示符(CMD),因为CMD对路径的处理和Unix风格的shell有差异

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:44:20