【问题标题】:Troubles cross compiling with cgo enabled using go 1.3 on Mac OS X在 Mac OS X 上使用 go 1.3 启用 cgo 交叉编译的问题
【发布时间】: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


【解决方案1】:

在 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

【讨论】:

    【解决方案2】:

    作为替代解决方案,您可以尝试https://github.com/karalabe/xgo

    它使涉及到的cgo交叉编译变得非常简单:

    • 已安装并运行 docker
    • 去 github.com/karalabe/xgo
    • 光盘
    • xgo --targets=linux/arm .

    关于如何编译还有很多其他选项。

    【讨论】:

      猜你喜欢
      • 2015-11-25
      • 2011-03-17
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多