我尝试使用 Go 1.3 在我的 darwin/amd64 MBP 上将 cgo 代码交叉编译到 linux/arm,但没有成功:(
我的环境:
go版本go1.3 darwin/amd64
我的目标:
针对linux/arm交叉编译cgo代码。
第一步:
使用 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:错误:无法识别的命令行选项“-m64”
对于 linux/arm:
GOOS=linux GOARCH=arm go install package/of/test
失败
runtime.main: call to external function main.main runtime.main:
undefined: 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 ./制作.bash
为 RANLIB 添加目标,像这样(我不确定)
须藤 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
关于macos - 在 Mac OS X 上使用 go 1.3 启用 cgo 进行交叉编译时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24557057/