Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 在Mac OS X上使用go 1.3启用cgo时交叉编译的问题_Macos_Go_Cross Compiling_Cgo - Fatal编程技术网

Macos 在Mac OS X上使用go 1.3启用cgo时交叉编译的问题

Macos 在Mac OS X上使用go 1.3启用cgo时交叉编译的问题,macos,go,cross-compiling,cgo,Macos,Go,Cross Compiling,Cgo,我尝试在darwin/amd64 MBP上用Go 1.3交叉编译cgo代码到linux/arm,但没有成功:( 我的环境: go版本go1.3达尔文/amd64 我的目标是: 交叉编译针对linux/arm的cgo代码 步骤1: 使用ct ng构建gcc/g++交叉编译器。构建arm-unknown-linux-gnueabi-g++和arm-unknown-linux-gnueabi-gcc,需要很长的路要走,但我最终成功了。我用简单的C/C++程序进行了测试,结果在我的linux/arm R

我尝试在darwin/amd64 MBP上用Go 1.3交叉编译cgo代码到linux/arm,但没有成功:(

我的环境:

go版本go1.3达尔文/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))
}
主程序包
/*
#包括
#包括
*/
输入“C”
进口(
“不安全”
)
func main(){
str:=C.CString(“abc\n”)
C.printf(str)
C.free(不安全的指针(str))
}
对于我的主机:

安装软件包/of/test

失败于

arm未知linux gnueabi gcc:错误:无法识别的命令行选项'-m64'

对于linux/arm:

GOOS=linux-GOARCH=arm-go-install-package/of/test

失败于

runtime.main:调用外部函数main.main runtime.main:

未定义:main.main


有什么想法吗?谢谢。

在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
作为替代解决方案,您可以尝试

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

  • 安装并运行docker
  • 获取github.com/karalabe/xgo
  • 光盘
  • xgo--targets=linux/arm
关于如何编译,还有很多其他选项。

这可能会有所帮助