2012-01-11 48 views
2

我是Go語言的忠實粉絲,現在我正在嘗試探索除x86/amd64之外的其他體系結構。我爲ARM構建Go,並且似乎對該目標有很好的支持。所有的庫都成功構建,並且測試失敗(因爲它試圖在我的amd64系統上運行ARM測試二進制文件)。我的Go工具是否爲錯誤的架構而構建?

畢竟,我在我的$GOBIN文件夾中有5g/5l,它們生成有效且正常的ARM二進制文件。 但是發生了什麼其他的圍棋工具:

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二進制文件,gofixgofmt也是ARM二進制文件。我認爲如果我提供$GOHOSTOS/$GOHOSTARCH變量,我會交叉編譯我的應用程序嗎?如何獲得cgo適用於ARM目標?

+0

我不知道你問這裏有什麼,你有一個ARM二進制CGO和你問如何使它在ARM工作?你能澄清一下這個問題嗎? – 2012-01-11 17:22:04

+0

我的主機是amd64,編譯器和鏈接器是am64,但cgo是ARM。我雖然cgo運行在主機PC上,而不是目標設備上,所以我期望它也是amd64。糾正我,如果我錯了。那麼,問題是應該爲目標體系結構編譯Go工具,以及爲主機PC編譯什麼? – zserge 2012-01-11 17:28:02

回答

2

Go linux/arm端口不完整。例如,linux/armcgo運行時未實現。見$GOROOT/src/pkg/runtime/cgo/gcc_arm.S$GOROOT/src/pkg/runtime/cgo/gcc_linux_arm.c

[cgo on arm.]它不計劃轉到1.

+0

悲傷,但真實:(你知道關於gcc-go支持ARM的任何事情(如果有一種方法可以將我的Go代碼與使用ARM target的C代碼連接起來)? – zserge 2012-01-11 18:41:03

相關問題