cyfdecyf / cow

HTTP proxy written in Go. COW can automatically identify blocked sites and use parent proxies to access.
BSD 2-Clause "Simplified" License
8.45k stars 1.61k forks source link

Ubuntu 上交叉编译 ARM 版本运行提示 illegal instruction #137

Closed rampageX closed 10 years ago

rampageX commented 10 years ago

我在 Ubuntu 上配置好 Go 的交叉编译环境,用:

GOARM=5 go-linux-arm get github.com/cyfdecyf/cow

编译出来的 cow 执行文件:

$ file ~/mygo/bin/linux_arm/cow /home/punk/mygo/bin/linux_arm/cow: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, not stripped

但是放去路由器上运行则提示 illegal instruction;

网站提供的 cow-linux-armv5tel-0.9.1.gz 在同一路由器上运行没有问题。

请问编译过程中需要注意什么?

cyfdecyf commented 10 years ago

我不确定原因。我配置交叉编译使用的是 golang-crosscompile 脚本,然后自己设置 GOARM, GOARCH 来编译的。

rampageX commented 10 years ago

我也是用的这个脚本,但是没设置 GOARM 和 GOARCH 而是使用了 go-linux-arm 命令行,编译出来的文件 4.3M ,比你编译出来的小很多,估计有问题。我试试你的方法。

rampageX commented 10 years ago

export GOARCH=arm export GOARM=5 go get github.com/cyfdecyf/cow

貌似还是不行,出来的 cow 还是 4.xM。。。。

punk@ubuntu:~$ file /home/punk/mygo/bin/linux_arm/cow /home/punk/mygo/bin/linux_arm/cow: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, not stripped punk@ubuntu:~$ env | grep '^GO' GOARM=5 GOARCH=arm GOPATH=/home/punk/mygo

rampageX commented 10 years ago

GO 的版本有没影响的?我是用: hg clone -u default https://code.google.com/p/go $HOME/go 下载的,还是要下载某个特定版本?

rampageX commented 10 years ago

下载 go1.1.linux-386.tar.gz 编译可以了,看来是 GO 版本问题。

kdrx commented 10 years ago

hello,我下载了go1.1.linux-386.tar.gz ,用ubuntu 交叉编译 出现了 mygo/src/github.com/cyfdecyf/cow/parent_proxy.go:290: undefined: sort.Stable 这个错误是什么原因啊?是交叉平台的问题吗?

cyfdecyf commented 10 years ago

这个函数在 Go 1.3 中才有。如果一定要用 Go 1.1 的话把 Stable 改成 Sort。

kdrx commented 10 years ago

上面有兄弟反应go 1.3 编译的不能运行arm 架构的 asus ac68u上。

kdrx commented 10 years ago

go1.3交叉编译成功运行。 奇怪的是cyf兄弟编译的版本http://dl.chenyufei.info/cow/cow-linux-armv5tel-0.9.2.gz 运行在同一个路由器出现: illegal instruction

cyfdecyf commented 10 years ago

我是在 Mac 上交叉编译的,不过我只有测过 armv7。能贴下你用来交叉编译的命令么?

kdrx commented 10 years ago

我是按照你上面推荐的这个:http://dave.cheney.net/2012/09/08/an-introduction-to-cross-compilation-with-go 照猫画虎弄得。 不过我没源码编译go,直接下载http://golang.org/dl/ 下的二进制包go1.3.linux-amd64.tar.gz,解压,设置环境:export GOROOT=$HOME/go/go export GOPATH=$HOME/go/mygo export PATH=$PATH:$GOROOT/bin export GOARCH=arm export GOARM=5 cd $GOROOT/src && ./make.bash go get github.com/cyfdecyf/cow

get it, over!

changtimwu commented 10 years ago

Hi! 各位: 我在一台古老的ARM926EJS板子, 也遇到 illegal instruction的問題, 感謝 @kdrx , 改用你上面的方法就解決了.