En este post te mostraré cómo compilar código de Go a un ejecutable de 32 bits desde una computadora con procesador de 64 bits.
Para ello usaré Windows, pero igualmente aplica para Linux, solo debes saber cómo cambiar las variables de entorno.
Asumo que tienes una instalación de Go funcionando y que lo has agregado a la PATH. Si no:
Aunque ya hayas instalado Go de 64 bits y todo esté funcionando bien, debes descargar Go para 32 bits.
Ve a la página de descargas: https://golang.org/dl/ y selecciona Go para 32 bits, en formato zip. Yo elegí para Windows, si estás en otro SO elige lo que te convenga.
Ahora se va a descargar el zip. Debes extraerlo en un lugar distinto a donde tienes instalado el otro.
En mi caso, el contenido del zip está en:
D:\Go32\go
Como se ve en la captura:
Recuerda bien esa ruta.
Cuando compiles para 64 bits, haz tu proceso normal. Por ejemplo:
go build
Y ya
Al compilar para 32 bits, debes modificar la PATH y la GOROOT. En resumen es lo siguiente en la terminal:
SET PATH=D:\Go32\go\bin;%PATH% && SET GOROOT=D:\Go32\go\
Cambiando obviamente tus rutas. En mi caso descargué todo en D:\Go32\go
y por eso lo pongo así. Sigue leyendo para más detalles.
La variable PATH es de Windows, y la GOROOT es la que indica la raíz de Go. Como el compilador de Go para 64 bits ya está en la PATH, debemos sobrescribirlo antes de compilar.
Pero bueno, vamos poco a poco. Para modificar la PATH temporalmente ejecutamos:
set PATH=D:\Go32\go\bin;%PATH%
En este caso D:\Go32\go\bin es la ubicación de Go de 32 bits. Al final agrego también %PATH%
para que se concatene y respete los otros directorios existentes en la misma.
Si después de compilar para 32 quieres compilar para 64, simplemente cierra la terminal y vuelve a abrirla. Ya que los cambios que hicimos anteriormente solo viven mientras la terminal vive.
En caso de que no quieras cerrar la terminal, cambia la PATH
y la GOROOT
a la instalación de 64 bits; no recomiendo mucho esto último.
Para que veas que esto funciona, crea el siguiente archivo llamado arquitectura.go:
package main
import "fmt"
/*
Recuerda establecer a 32 bits con:
SET PATH=D:\Go32\go\bin;%PATH% && SET GOROOT=D:\Go32\go\
(Obviamente cambiando las rutas)
*/
// Código tomado de https://grokbase.com/t/gg/golang-nuts/14c1mpnz2e/go-nuts-is-code-running-on-32-bit-or-64-bit-platform
const es64Bits = uint64(^uint(0)) == ^uint64(0)
func main() {
fmt.Println("¿Es de 64 bits?", es64Bits)
}
Eso nos dirá si es de 32 o de 64 gracias a un código que tomé prestado de la página que aparece en el comentario.
Todo lo que explico se queda resumido en la siguiente captura:
Primero compilo normalmente para 64 bits en arquitectura_64.exe
. El programa imprime true.
Después cambio la PATH y compilo de nuevo ahora a uno llamado arquitectura_32.exe
. El programa imprime false
.
También puedes comprobarlo usando una PC de 32 bits, al intentar ejecutar el de 64 bits dirá que no es posible 😉
Otra forma de comprobar que es para 32 bits (y no sé por qué) es mirando el peso de los archivos. Los de 32 bits pesan menos:
No es un método confiable, pero es una forma rápida de comprobarlo.
La compilación para otras arquitecturas es una de las cosas que hacen que me guste Go.
De esta forma podemos compilar para 32 bits desde una máquina de 64 bits.
Si te preguntas, no, no es posible compilar para 64 bits desde una máquina de 32 bits.
Recuerda: puedes leer más sobre Go en mi blog.
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…
Esta web usa cookies.