【发布时间】:2014-08-24 18:36:39
【问题描述】:
我尝试在我的 darwin/amd64 MBP 上使用 Go 1.3 将 cgo 代码交叉编译到 linux/arm,但没有成功:(
我的环境:
go version go1.3 darwin/amd64
我的目标:
交叉编译针对 linux/arm 的 cgo 代码。
第 1 步:
使用 ct-ng 构建 gcc/g++ 交叉编译器。构建arm-unknown-linux-gnueabi-g++ 和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
有什么想法吗?谢谢。
【问题讨论】:
标签: macos go cross-compiling cgo