麻烦在Mac OS X上使用go 1.3启用cgo交叉编译

Kev*_*uan 5 macos cross-compiling go cgo

我尝试使用Go 1.3将cgo代码交叉编译到我的darwin/amd64 MBP上的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))
}
Run Code Online (Sandbox Code Playgroud)

对于我的主机:

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:

undefined:main.main

任何的想法?谢谢.

Ale*_*lyi 0

在 Mac 上交叉编译 Android 时遇到同样的问题。希望对您有帮助。

在第 2 步:

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