5

Go 1.3 を使用して darwin/amd64 MBP で 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/アームの場合:

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

で失敗しました

runtime.main: 外部関数の呼び出し main.main runtime.main:

未定義: main.main

何か案が?ありがとう。

4

2 に答える 2

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

于 2014-11-09T20:33:40.227 に答える