I tried to cross compile cgo code to linux/arm on my darwin/amd64 MBP with Go 1.3, but ended with no luck :(
My environment:
go version go1.3 darwin/amd64
My goal:
Cross compiling cgo code targeting linux/arm.
Step 1:
Building gcc/g++ cross compiler with ct-ng. It was a long way to build arm-unknown-linux-gnueabi-g++
and arm-unknown-linux-gnueabi-gcc
, but I finally made it. I tested with simple C/C++ programs and the outputs worked fine on my linux/arm R-Pi box.
Step 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
Everything built OK.
Step 3:
Compiling the following simple cgo code:
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))
}
For my host machine:
go install package/of/test
Failed with
arm-unknown-linux-gnueabi-gcc: error: unrecognized command line option '-m64'
For linux/arm:
GOOS=linux GOARCH=arm go install package/of/test
Failed with
runtime.main: call to external function main.main runtime.main:
undefined: main.main
Any idea? Thanks.