Macos 在Mac OS X上使用go 1.3启用cgo时交叉编译的问题
我尝试在darwin/amd64 MBP上用Go 1.3交叉编译cgo代码到linux/arm,但没有成功:( 我的环境: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
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