Мои инструменты Go созданы для неправильной архитектуры? - PullRequest
2 голосов
/ 11 января 2012

Я большой поклонник языка Go, и сейчас я пытаюсь изучить другие архитектуры, кроме x86 / amd64. Я собираю Go для ARM, и он, похоже, хорошо поддерживает эту цель. Все библиотеки создаются успешно, и тесты не выполняются (потому что он пытается запустить исполняемые двоичные файлы ARM в моей системе amd64).

В конце концов, у меня есть 5g / 5l в моей папке $GOBIN, и они создают действующие и работающие двоичные файлы ARM. Но что происходит с другими инструментами Go:

5a:        ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
5c:        ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
5g:        ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
5l:        ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
6cov:      ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
6nm:       ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
6prof:     ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
cgo:       ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, not stripped
ebnflint:  ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, not stripped
godefs:    ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
godoc:     ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, not stripped
gofix:     ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, not stripped
gofmt:     ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, not stripped
goinstall: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, not stripped
gomake:    POSIX shell script, ASCII text executable
gopack:    ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
gopprof:   a perl script, ASCII text executable
gotest:    ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, not stripped
gotry:     a bash script, ASCII text executable
gotype:    ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, not stripped
govet:     ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, not stripped
goyacc:    ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, not stripped
hgpatch:   ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, not stripped

См? cgo является двоичным файлом ARM, gofix и gofmt также являются двоичными файлами ARM. Я думал, что ожидается, что если я предоставлю $GOHOSTOS / $GOHOSTARCH переменные, я буду кросс-компилировать мои приложения? Как заставить cgo работать на ARM target?

1 Ответ

2 голосов
/ 11 января 2012

Порт Go linux/arm не завершен.Например, cgo время выполнения для linux/arm не реализовано.См. $GOROOT/src/pkg/runtime/cgo/gcc_arm.S и $GOROOT/src/pkg/runtime/cgo/gcc_linux_arm.c.

[cgo on arm.] Это не запланировано для Go 1.

...