Apple Silicon M2下MediaPipe手部追踪GPU版编译报Bad CPU type错误
Apple Silicon M2编译MediaPipe Android手部追踪GPU示例报错解决方案
问题场景
按照MediaPipe官方文档配置环境后,已成功运行hello world测试示例,但执行Android手部追踪GPU版的编译命令时失败:
bazel build -c opt --config=android_arm64 mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu:handtrackinggpu
错误信息
ERROR: /private/var/tmp/_bazel_burak/b7cfac50f1c6080dd0242194e8dbaa69/external/org_tensorflow/tensorflow/lite/delegates/gpu/gl/kernels/BUILD:321:11: Compiling tensorflow/lite/delegates/gpu/gl/kernels/mean.cc failed: (Exit 1): clang failed: error executing command (from target @org_tensorflow//tensorflow/lite/delegates/gpu/gl/kernels:mean) external/androidndk/ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang -gcc-toolchain external/androidndk/ndk/toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64 -target ... (remaining 54 arguments skipped) Use --sandbox_debug to see verbose messages from the sandbox and retain the sandbox build root for debugging src/main/tools/process-wrapper-legacy.cc:80: "execvp(external/androidndk/ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang, ...)": Bad CPU type in executable Target //mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu:handtrackinggpu failed to build Use --verbose_failures to see the command lines of failed build steps. INFO: Elapsed time: 15.290s, Critical Path: 11.95s INFO: 274 processes: 140 internal, 134 darwin-sandbox. FAILED: Build did NOT complete successfully
问题原因
这是Apple Silicon M2芯片架构导致的兼容性问题:Bazel默认拉取的是x86_64架构的Android NDK工具链,而M2基于arm64架构,直接执行x86版本的clang会触发"Bad CPU type in executable"错误。
解决步骤
1. 升级Bazel版本
确保使用支持Apple Silicon的Bazel稳定版(推荐5.0及以上版本),旧版本对arm64架构的NDK支持不完善。
2. 修改WORKSPACE指定arm64架构NDK
在MediaPipe的WORKSPACE文件中,找到下载Android NDK的http_archive块,替换为arm64架构的NDK包:
http_archive( name = "androidndk", urls = [ "https://dl.google.com/android/repository/android-ndk-r25c-darwin-arm64.zip", ], sha256 = "a1a87a69a42b3c46e9c48e2430e4294b5c11c5e02c76e4562b5f645e3a7a9f0c", # 对应r25c arm64版本的sha256值 build_file = "@//third_party:androidndk.BUILD", )
3. 调整编译命令参数
在原编译命令中添加arm64架构配置和NDK API等级参数:
bazel build -c opt --config=android_arm64 --config=darwin_arm64 --android_ndk_api_level=29 mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu:handtrackinggpu
4. (备选)使用Rosetta 2兼容模式
如果上述方法无效,右键终端应用→显示简介→勾选"使用Rosetta打开",重启终端后重新执行编译命令。
内容的提问来源于stack exchange,提问作者Burak Karaduman
相关产品推荐
相关产品推荐

