Golang中Android/arm64的构建问题

Golang中Android/arm64的构建问题 我的Go环境如下:

Imgur

我的.bashrc文件如下:

Imgur

我的main.go文件如下:

Imgur

但我的构建出现以下错误:

Imgur

抱歉,我的英语不好。 有什么建议吗?

10 回复

好的,我会尝试。

更多关于Golang中Android/arm64的构建问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


你检查过所有权和权限了吗?

是的,所有文件都设置为 chmod 777

mark 是否被允许读取 /root 目录及其子目录的内容?

把东西放在这个位置有点奇怪……

你的目标是什么?

为什么没有使用 gomobile

在你的截图中,GOTOOLDIR 看起来有些可疑……

抱歉,我放弃了。 谢谢你的建议。 我构建成功了,但*.so文件被Qt包含了。 应用程序总是崩溃。 使用QLibrary得到相同的结果。 我放弃了。

我将SDK移动到/home/username/Android/Sdk目录下, 并重新设置了ANDROID_HOME和ANDROID_NDK_HOME环境变量, 但仍然遇到相同的错误。 我进入ndk/platforms/android-28目录查找include目录,但无法找到。

由于你直接使用 go,可能还需要在 CGO_* 变量中加入一些 -I… 参数。

但是 go 是否使用了正确的 gcc 呢?

我从未尝试过在 Android 上使用 go……

我的目标如下: 将Golang编译为xxx.so文件,并使用Qt(C++)调用Golang的库。 因为Qt的HTTP库不好用,所以我想使用Golang的HTTP库。 我已经尝试了以下方法: 我下载了arm64版本的gcc,并编译了Golang(GOOS=android或linux;GOARCH=arm64) 我下载了arm版本的gcc并编译了Golang(GOOS=android或linux,GOARCH=arm) 全部编译成功(go build -buildmode=c_shared -o test.so main.go) 但是应用程序崩溃了。

为什么不使用gomobile? 因为gomobile生成的是.aar文件。 我必须使用C++调用JNI,感觉这样绕了弯路。

我不知道GOTOOLDIR为何让你产生怀疑。 是否存在任何错误!?

根据您提供的错误信息和配置,问题在于构建Android/arm64目标时缺少必要的C语言交叉编译工具链。以下是解决方案:

首先需要安装Android NDK并配置正确的环境变量:

# 下载Android NDK(以r21d版本为例)
wget https://dl.google.com/android/repository/android-ndk-r21d-linux-x86_64.zip
unzip android-ndk-r21d-linux-x86_64.zip

# 在.bashrc中添加环境变量
export ANDROID_NDK_HOME=/path/to/android-ndk-r21d
export PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH

然后设置Go的环境变量来启用Android交叉编译:

export GOOS=android
export GOARCH=arm64
export CGO_ENABLED=1
export CC=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang

构建命令示例:

# 重新加载配置
source ~/.bashrc

# 构建Android arm64版本
go build -o app_android_arm64 main.go

如果仍然遇到问题,可以尝试使用纯Go构建(禁用CGO):

export CGO_ENABLED=0
go build -o app_android_arm64 main.go

对于包含C语言依赖的项目,必须确保NDK工具链正确配置。检查您的main.go文件是否包含cgo指令:

// 如果使用cgo,确保有正确的构建标签
// #cgo LDFLAGS: -llog

package main

import "C"

func main() {
    // 您的代码
}

如果错误持续存在,请验证NDK安装路径和工具链可执行文件的权限。

回到顶部