我试着用Go 1.3将cgo代码编译到达尔文/amd64 64 MBP上的linux/arm,但最终没有结果:(
我的环境:
go version go1.3 darwin/amd64
我的目标是:
交叉编译针对linux/arm的cgo代码。
步骤1:
用ct构造gcc/g++交叉编译器。构建arm-unknown-linux-gnueabi-g++
和arm-unknown-linux-gnueabi-gcc
有很长的路要走,但我终于做到了。我用简单的C/C++程序进行了测试,输出在我的linux/arm R盒上工作得很好。
第2步:
cd /path/to/go/src sudo CGO_ENABLED=1 CGO_ENABLED=1 GOOS=linux GOARCH=arm ./make.bash
一切都很好。
第3步:
编译以下简单的cgo代码:
package main
/*
#include <stdio.h>
#include <stdlib.h>
*/
import "C"
import (
"unsafe"
)
func main() {
str := C.CString("abc\n")
C.printf(str)
C.free(unsafe.Pointer(str))
}
对于我的主机:
go install package/of/test
失败了
arm-unknown-linux-gnueabi-gcc: error: unrecognized command line option '-m64'
对于linux/arm:
GOOS=linux GOARCH=arm go install package/of/test
失败了
runtime.main:调用外部函数main.main runtime.main: 未定义: main.main
有什么想法吗?谢谢。
发布于 2014-11-09 20:33:40
在Mac上交叉编译Android也有同样的问题。希望它能帮到你。
在第二步:
sudo CGO_ENABLED=1 CC_FOR_TARGET=/path/to/arm-unknown-linux-gnueabi-gcc CXX_FOR_TARGET=/path/to/arm-unknown-linux-gnueabi-g++ GOOS=linux GOARCH=arm ./make.bash
为RANLIB添加目标,类似于此(我不确定)
sudo CGO_ENABLED=1 CC_FOR_TARGET=/path/to/arm-unknown-linux-gnueabi-gcc CXX_FOR_TARGET=/path/to/arm-unknown-linux-gnueabi-g++ RANLIB_FOR_TARGET=/path/to/arm-unknown-linux-gnueabi-ranlib GOOS=linux GOARCH=arm ./make.bash
发布于 2017-07-03 09:44:15
作为另一种解决方案,您可以尝试https://github.com/karalabe/xgo。
它使与cgo的交叉编译变得非常简单:
关于如何编译,还有很多其他选项。
https://stackoverflow.com/questions/24557057
复制相似问题