Linux下带CGO的Android交叉编译报错,应使用何种GCC?
问题:Linux下交叉编译Android Go应用时缺失
android/log.h报错 执行Go交叉编译命令:
CGO_ENABLED=1 GOOS=android GOARCH=arm64 go build .
出现如下编译错误:
gcc_android.c:6:10: fatal error: android/log.h: No such file or directory 6 | #include <android/log.h> | ^~~~~~~~~~~~~~~ compilation terminated.
请问应使用哪种GCC?
解决方法:使用Android NDK提供的交叉编译工具链
你需要使用Android NDK自带的交叉编译工具(Clang或旧版GCC),而非系统默认的GCC。Android NDK包含了Android平台完整的头文件(包括android/log.h)、库文件和适配不同架构的交叉编译器。
- 具体操作步骤:
- 下载并解压Android NDK到本地路径(例如
/opt/android-ndk) - 针对arm64架构,指定NDK中的交叉编译器:
- 新版NDK(r18+)推荐用Clang,路径通常为:
/opt/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android<API_LEVEL>-clang(<API_LEVEL>替换为你需要的Android API版本,比如21) - 若坚持用GCC,需使用NDK r17及更早版本,编译器路径为:
/opt/android-ndk/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-gcc
- 新版NDK(r18+)推荐用Clang,路径通常为:
- 修改Go编译命令,通过
CC变量指定交叉编译器:CGO_ENABLED=1 GOOS=android GOARCH=arm64 CC=/opt/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang go build .
- 下载并解压Android NDK到本地路径(例如
内容的提问来源于stack exchange,提问作者M.Sz.
相关产品推荐
相关产品推荐

