Siu*_*ji- 6 android cross-compiling go cgo
我正在努力建立一个标准的"Hello,World!" Android的命令行可执行文件.可执行文件将通过运行adb shell
.
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello, world!")
}
Run Code Online (Sandbox Code Playgroud)
$ CGO_ENABLED=0 GOOS=android GOARCH=arm GOARM=7 go build .
Run Code Online (Sandbox Code Playgroud)
# github.com/asukakenji/cross
warning: unable to find runtime/cgo.a
/usr/local/go/pkg/tool/darwin_amd64/link: running clang failed: exit status 1
ld: warning: ignoring file
/var/folders/dd/6k6vkzbd6d5803xj9zkjdhmh0000gn/T/go-link-150305609/go.o,
file was built for unsupported file format
( 0x7F 0x45 0x4C 0x46 0x01 0x01 0x01 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 )
which is not the architecture being linked (x86_64):
/var/folders/dd/6k6vkzbd6d5803xj9zkjdhmh0000gn/T/go-link-150305609/go.o
Undefined symbols for architecture x86_64:
"_main", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
以下命令给出相同的结果:
$ env CGO_ENABLED=0 GOOS=android GOARCH=arm GOARM=7 go build .
Run Code Online (Sandbox Code Playgroud)
我试过"-v"
像这样提到的使用:
$ CGO_ENABLED=0 GOOS=android GOARCH=arm GOARM=7 go build \
-x -ldflags "-extldflags -v" .
Run Code Online (Sandbox Code Playgroud)
它给了我超过100行的消息,所以除非有必要,否则我不会在此发布.该go build
命令似乎尝试使用clang
捆绑的来编译源代码Xcode
.
鉴于提示找到了错误的编译器,我尝试设置$CC
如下:
$ CGO_ENABLED=0 GOOS=android GOARCH=arm GOARM=7 \
CC=/path/to/arm-linux-androideabi/bin/clang go build .
Run Code Online (Sandbox Code Playgroud)
arm-linux-androideabi
是make_standalone_toolchain.py
(或make-standalone-toolchain.sh
)的输出.
cross
已成功构建可执行文件(已命名),并显示以下消息:
# github.com/asukakenji/cross
warning: unable to find runtime/cgo.a
Run Code Online (Sandbox Code Playgroud)
我试过adb push
它并adb shell
在Android上运行它,它工作正常.
在为Linux(而不是Android)构建时,编译工作正常:
$ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build .
Run Code Online (Sandbox Code Playgroud)
为什么?
go build
命令仍在寻找.我该如何摆脱警告?没有一个怎么样有害?runtime/cgo.a
CGO_ENABLED=0
谢谢!
小智 5
如果你运行该代码,你会发现 android 作为官方目标平台,列为 GOOS/GOARCH
$go tool dist list
Run Code Online (Sandbox Code Playgroud)
Android 不是交叉编译的官方目标平台。如果您需要的只是命令行可执行文件,那么您可以设置 GOOS=linux 因为 android 是一个底层的 linux,否则请查看https://github.com/golang/go/wiki/Mobile
归档时间: |
|
查看次数: |
3779 次 |
最近记录: |