Go Cross Compilation no Mavericks

(Atualizado em março de 2014 para go 1.2.1)

Acabei de atualizar para o Mavericks e meu ambiente de compilação cruzada parou de funcionar corretamente.

Com o Mavericks, a Apple removeu o gcc das ferramentas de desenvolvedor de linha de comando (agora é clang apenas com link simbólico para gcc).

A fim de obter o código fonte 1.2.1 para compilar, tive que instalar o gcc na minha máquina Mavericks, pois estava falhando com o clang. Eu vi alguma discussão na lista de e-mails go sobre isso, mas da forma como está, não consegue construir.

Aqui está o que eu fiz para fazê-lo funcionar

Primeiro instalei o gcc via homebrew:

# installing gcc on mavericks using brew
brew tap homebrew
/dupes
brew install apple
-gcc42

Então eu vinculei simbolicamente o apple-gcc42 recém-instalado em minha pasta / usr / bin

cd /usr/bin
sudo mv gcc gcc_mavs

sudo ln
-s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2 gcc

Agora, executando ‘gcc’ deve mostrar a você:

i686-apple-darwin11-gcc-4.2.1: no input files

O gcc agora está bom e você pode compilar a partir dos fontes.

Para me divertir, vou repassar o resto da minha configuração de compilação cruzada.

Configurando o ambiente de compilação cruzada

Primeiro baixe a fonte go mais recente (no momento, março de 2014, é a versão 1.2.1)

curl -O https://go.googlecode.com/files/go1.2.1.src.tar.gz

Descompacte

tar -zxvf go1.2.1.src.tar.gz

Em seguida, vá para o diretório go e compile-o

cd go/src

./all.bash

Assim que go terminar de compilar, você pode configurar a compilação cruzada construindo diferentes conjuntos de ferramentas para as plataformas que deseja oferecer suporte.

Eu pessoalmente gosto que façamos isso.

Primeiro instale o goxc:

go get github.com/laher/goxc

Em seguida, execute a compilação do conjunto de ferramentas:

goxc -t

Quando isso for concluído, você terá todos os conjuntos de ferramentas da plataforma construídos e disponíveis para uso em seu sistema.

Para usá-los, você pode usar goxc ou prefiro apenas executar comandos de compilação diretamente ou por meio de scripts.

Você está pronto para fazer compilações multiplataforma 🙂

Por exemplo, para construir um projeto para linux 64 bits:

GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o binary_name source_file.go