我尝试使用 Go 1.3 在我的 darwin/amd64 MBP 上将 cgo 代码交叉编译到 linux/arm,但没有成功:(
我的环境:
go version go1.3 darwin/amd64
我的目标:
交叉编译针对 linux/arm 的 cgo 代码。
步骤1:
使用 ct-ng 构建 gcc/g++ 交叉编译器。arm-unknown-linux-gnueabi-g++
构建and的路很长arm-unknown-linux-gnueabi-gcc
,但我终于做到了。我用简单的 C/C++ 程序进行了测试,输出在我的 linux/arm R-Pi 机器上运行良好。
第2步:
cd /path/to/go/src
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
一切正常。
第 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
任何想法?谢谢。