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

在Android物理设备运行Go程序遇“not executable: 64-bit ELF file”问题求助

解决Android x86_64设备运行Go编译程序报错问题

问题根源

你的Android设备架构是x86_64,但编译时指定了GOARCH=arm64,生成的是arm64架构的ELF可执行文件,和设备硬件架构不匹配,导致设备无法识别运行。

至于不指定CC时Hello World能运行,大概率是Android的x86_64设备内置了arm64二进制仿真层,能兼容Go默认编译的动态链接型arm64程序(依赖系统bionic libc),但你用musl-gcc编译的是静态链接musl libc的arm64程序,仿真层无法处理这种纯musl静态编译的二进制,因此报错。

解决步骤

  1. 匹配设备架构编译
    把编译参数里的GOARCH改成amd64(对应x86_64架构),保持GOOS=linux不变:

    GOOS=linux GOARCH=amd64 go build -o hello hello.go
    

    这样生成的程序直接适配设备架构,无需仿真,运行不会有问题。

  2. 如果需要用musl编译静态程序
    你现在用的是aarch64的musl交叉编译器,要换成x86_64版本的musl工具链:

    • 下载x86_64-linux-musl-cross工具链并解压到本地目录
    • 编译时指定对应路径的CC:
      GOOS=linux GOARCH=amd64 CC=~/x86_64-linux-musl-cross/bin/x86_64-linux-musl-gcc go build -ldflags="-s -w" -o hello_static hello.go
      

    编译完成后可以用file hello_static验证,输出应该包含x86_64和statically linked字样。

  3. 验证程序兼容性
    把编译好的文件传到Android设备后,记得先赋予执行权限:

    adb push hello /data/local/tmp/
    adb shell chmod +x /data/local/tmp/hello
    adb shell /data/local/tmp/hello
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 22:55:15