2014-07-03 8 views
5

Próbowałem przejechać skompilować kod CGO Linux/ramienia na moim darwin/amd64 MBP z Go 1.3, ale zakończył się bez powodzenia :(Troubles krzyż kompilacji z CGO włączona za pomocą przejść 1.3 na Mac OS X

moim otoczeniu :

go version go1.3 darwin/amd64

Mój cel:

Krzyż kompilacji kodu CGO kierowania linux/ramię

Krok 1:.

Budowanie kompilatora gcc/g ++ z ct-ng. To była długa droga do zbudowania arm-unknown-linux-gnueabi-g++ i arm-unknown-linux-gnueabi-gcc, ale w końcu udało mi się. Testowałem z prostymi programami C/C++, a wyjścia działały dobrze na moim pudełku R-Pi Linux-a.

Etap 2:

cd/ścieżka/do/GO/Src

sudo CGO_ENABLED = 1 CC_FOR_TARGET =/ścieżka/do/ramię wiadomo, Linux, gnueabi-GCC CXX_FOR_TARGET =/ścieżka/to/arm-unknown-linux-gnueabi-g ++ GOOS = linux GOARCH = ramię ./make.bash

Wszystko w porządku.

Krok 3:

Kompilacja następujący prosty kod 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)) 
} 

Na moim komputerze host:

go install package/of/test

Failed z

arm-unknown-linux-gnueabi-gcc: error: unrecognized command line option '-m64'

dla Linux/Ramiona:

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

nie powiodło się

runtime.main: wywołanie Funkcja zewnętrznego main.main runtime.main:

zdefiniowana: main.main

Każdy pomysł? Dzięki.

+0

To może pomóc http://stackoverflow.com/questions/16188228/arm-compiler-with-autoconf –

Odpowiedz

0

Wystąpił ten sam problem w przypadku krzyżowej kompilacji Androida na komputerach Mac. Mam nadzieję, że ci to pomoże.

Na Krok 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

celu dodania do ranlib, coś takiego (nie wiem pewne)

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

0

Jako rozwiązanie alternatywne można spróbować https://github.com/karalabe/xgo .

To sprawia, że ​​krzyż kompilacji z CGO zaangażowany naprawdę prosta:

  • zainstalowano doker i działa
  • idź github.com/karalabe/xgo
  • cd
  • xgo --targets = linux /ramię .

Istnieje wiele innych opcji kompilacji.