2014-07-03 12 views
5

Ich habe versucht, CGO Code auf Linux/Arm auf meinem darwin/amd64 MBP mit Go 1.3, aber am Ende ohne Glück :(Troubles mit CGO Kreuzkompilierung aktiviert auf Mac OS gehen 1.3 mit X

Meine Umgebung zu überqueren kompilieren :

go version go1.3 darwin/amd64

Mein Ziel:

Kreuz CGO Code kompiliert linux/Arm-Targeting

Schritt 1:.

Erstellen gcc/g ++ Cross-Compiler mit CT-ng. Es war ein langer Weg zu bauen arm-unknown-linux-gnueabi-g++ und arm-unknown-linux-gnueabi-gcc, aber ich habe es endlich geschafft. Ich habe mit einfachen C/C++ Programmen getestet und die Ausgänge funktionierten auf meiner Linux/Arm R-Pi Box.

Schritt 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-unbekannt-linux-gnueabi-g ++ GOOS = Linux GOARCH = Arm ./make.bash

Alles gebaut OK.

Schritt 3:

Kompilieren des folgenden einfachen CGO Code:

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)) 
} 

Für meine Host-Maschine:

go install package/of/test

fehlgeschlagen mit

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

für Linux/Arm:

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

Fehlgeschlagen mit

runtime.main: Aufruf einer externen Funktion main.main runtime.main:

undefined:

main.main

Irgendeine Idee? Vielen Dank.

+0

Dies könnte http://stackoverflow.com/questions/16188228/arm-compiler-with-autoconf helfen –

Antwort

0

Hatte das gleiche Problem für Cross-Compiling Android auf dem Mac. Hoffe es hilft dir.

Auf Ihrem Schritt 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

Add Ziel für ranlib, so etwas wie dieses (ich weiß nicht genau wissen)

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

Als alternative Lösung Sie https://github.com/karalabe/xgo könnten versuchen, .

Es macht Kreuzkompilierung mit CGO wirklich einfach beteiligt: ​​

  • haben Docker installiert und ausgeführt
  • go
  • cd
  • XGO --targets = linux github.com/karalabe/xgo zu erhalten/Arm.

Es gibt viele andere Optionen zum Kompilieren.