Gracias a la amable y paciente ayuda de las nueces de golang, la receta es la siguiente:
1) Se necesita compilar el compilador Go para diferentes plataformas y arquitecturas de destino. Esto se hace desde la carpeta src en la instalación de go. En mi caso, la instalación de Go se encuentra /usr/local/go
así, para compilar un compilador, necesita emitir una make
utilidad. Antes de hacer esto, necesita conocer algunas advertencias.
Hay un problema con la biblioteca CGO cuando se realiza una compilación cruzada, por lo que es necesario deshabilitar la biblioteca CGO.
La compilación se realiza cambiando la ubicación al directorio de origen, ya que la compilación debe realizarse en esa carpeta
cd /usr/local/go/src
luego compila el compilador Go:
sudo GOOS=windows GOARCH=386 CGO_ENABLED=0 ./make.bash --no-clean
Debe repetir este paso para cada sistema operativo y arquitectura que desee compilar cruzando cambiando los parámetros GOOS y GOARCH.
Si está trabajando en modo de usuario como yo, sudo es necesario porque el compilador Go está en el directorio del sistema. De lo contrario, debe iniciar sesión como superusuario. En Mac, es posible que deba habilitar / configurar el acceso a SU (no está disponible de forma predeterminada), pero si ha logrado instalar Go, posiblemente ya tenga acceso de root.
2) Una vez que haya compilado todos los compiladores cruzados, puede compilar felizmente su aplicación mediante la siguiente configuración, por ejemplo:
GOOS=windows GOARCH=386 go build -o appname.exe appname.go
GOOS=linux GOARCH=386 CGO_ENABLED=0 go build -o appname.linux appname.go
Cambia el GOOS y GOARCH a los objetivos que deseas construir.
Si encuentra problemas con CGO, incluya CGO_ENABLED = 0 en la línea de comando. También tenga en cuenta que los archivos binarios para Linux y Mac no tienen extensión, por lo que puede agregar extensión por el simple hecho de tener diferentes archivos. -o switch indica Ir a hacer que el archivo de salida sea similar a los compiladores antiguos para c / c ++, por lo tanto, el nombre de aplicación utilizado anteriormente.linux puede ser cualquier otra extensión.
sudo
(probablemente obtendría un ENV de Unix diferente al sudo, por lo que GOOS & GOARCH no estaría disponible si no se realizaran) en línea)CGO_ENABLED=0 GOOS=windows GOARCH=amd64 ./make.bash
- si intentó dividirlo en más de una línea, la variable de entorno no se exportará, lo que se ajusta a los síntomas