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

2022-04-11 20:50:09 +08:00
 gam2046

环境

需求

一个简单的 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 从哪里查找库吗?

992 次点击
所在节点    Go 编程语言
2 条回复
Akitora
2022-04-12 09:07:50 +08:00
当时交叉编译 CGO 到 amd64 linux 查了半天没搞定,后来干脆直接用 wsl 来编译了。
pagxir
2022-04-12 11:56:19 +08:00
说明你用的 ndk 比较新。新的 ndk 里面已经移除了独立的 log 库。所以直接在编译脚本上把 log 的依赖移除就好了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/846363

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX