Golang Go语言 请教关于交叉编译到 Android 的问题

发布于 1周前 作者 sinazl 来自 Go语言

环境

  • NDK:24.0.8215888
  • Golang:1.17

需求

一个简单的 golang 项目,由于里面包含了github.com/mattn/go-sqlite3,因此交叉编译到 Android 平台需要使用 CGO 。

使用了这样的编译方法

LD_FLAGS="-w -s -extldflags \"-static -fpic\" -buildid="
TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64
CGO_ENABLED=1 \
  GOARCH=arm64 \
  GOOS=android \
  CC=$TOOLCHAIN/bin/aarch64-linux-android32-clang \
  CXX=$TOOLCHAIN/bin/aarch64-linux-android32-clang++ \
  go build -a -ldflags "$LD_FLAGS" -o "$PUBLISH_DIR/binary-android-arm64-v8a" "$PROJECT_NAME"

结果提示:

aarch64-linux-android32-clang failed: exit status 1
ld: error: unable to find library -llog
clang-14: error: linker command failed with exit code 1 (use -v to see invocation)

各位大佬们,是我需要额外指定一些参数告诉 CGO 从哪里查找库吗?


Golang Go语言 请教关于交叉编译到 Android 的问题

更多关于Golang Go语言 请教关于交叉编译到 Android 的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

当时交叉编译 CGO 到 amd64 linux 查了半天没搞定,后来干脆直接用 wsl 来编译了。

更多关于Golang Go语言 请教关于交叉编译到 Android 的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


说明你用的 ndk 比较新。新的 ndk 里面已经移除了独立的 log 库。所以直接在编译脚本上把 log 的依赖移除就好了。

关于Golang交叉编译到Android的问题,以下是一些专业的解答和建议:

一、交叉编译简介

交叉编译是指在一种操作系统或硬件平台上生成另一种操作系统或硬件平台上可执行程序的过程。Golang的交叉编译功能强大且高效,允许开发者在本地构建适用于其他平台的代码。

二、环境准备

在进行交叉编译之前,需要确保已安装以下工具和库:

  1. Golang编程语言。
  2. Android NDK(Native Development Kit),这是构建Android应用所必需的工具集。
  3. 可选安装gomobile工具,它是用于Golang移动开发的工具,有助于生成Android绑定。

三、交叉编译步骤

  1. 编写Golang代码。
  2. 设置GOOS(目标操作系统)为android,GOARCH(目标架构)为arm、arm64等(根据目标设备架构选择)。
  3. 使用go build命令进行编译,生成适用于Android的二进制文件或共享库。
  4. 如果使用gomobile,可以生成.aar文件并在Android项目中导入。
  5. 在Android项目中调用Golang代码,通常通过JNI(Java Native Interface)实现。

四、测试与部署

将生成的APK安装到Android设备上,使用ADB工具进行安装和测试。确保应用能够正常运行并输出预期结果。

希望以上解答能够帮助你解决Golang交叉编译到Android的问题。如有其他问题,欢迎继续咨询。

回到顶部