Cross-compiling o virtualización

Imagen de nolin
8 puntos

Esta vez San Google no me resuelve mi duda. Pruebo aquí por si alguien tiene buenos consejos.

Quiero compilar un programa mío en varios SO (w32, w64, Ubuntu 32 y 64). La duda es si usar cross-compiling (CC) o compilar dentro de una máquina virtual (VM), por ejemplo en VirtualBox.

En principio, parece que usar CC puede ser más complicado al principio; pero superada esa fase, es más rápido que la VM. Y además cada VM la puedo tener "limpia", sin instalar software de programación, tal y como un usuario final lo tendría, y así puedo comprobar si mi aplicación necesita algo que sí está en mi PC pero no en la VM.

Por otro lado, compilando dentro de cada VM me aseguro de que las librerías son de la versión adecuada al SO.

Pregunto: ¿Cuáles son otras ventajas y desventajas de cada manera? ¿Cúal es la manera más utilizada? ¿Cuál da menos complicaciones a posteriori?

Gracias

Imagen de Jose Luis 1320
+1
-1
-1

Si google no te resuelve la duda, usa los libros...

ambos tienen ventajas y desventajas... queda tu criterio.

pero si quieres que tu programa sea multiplataforma... ¿que chiste tiene que lo compiles en una MV?

si lo compilas en la máquina virtual con windows, entonces lo compilas para windows, no multiplataforma.

+1
-1
-1

"Yo sólo se que no se nada"
-Sócrates, filósofo griego.
-Normas del foro

Imagen de gato2707
+1
0
-1

Antes que nada dependerá del lenguaje de programación que estés usando. A continuación del compilador y en tercer lugar de las especificaciones particulares de tu programa; por ejemplo uso de los recursos propios del sistema operativo, la API y otros detalles así por el estilo.

Por supuesto no existe una respuesta concreta. Pero si te sirve de referencia el Cross Compiling nunca es la mejor opción cuando se trata de la extensión en bits del sistema operativo, especialmente si intentas crear un binario de 64 bits desde un sistema operativo de 32 bits.

Para @Jose Luis 1320: El término multiplataforma está correctamente aplicado en este caso ya que de cualquier modo los programas nativos para un sistema operativo dado son diferentes a nivel binario a los que se puedan generar para otro, aún a partir del mismo código fuente.

Los únicos casos donde esto no es estrictamente cierto son los programas realizados en lenguajes que son interpretados y compilados. Estrictamente hablando Java y .NET ya que en ellos el binario diferente es la VM específica para cada sistema operativo.

Puedes ver como ejemplo muchos de los programas más usados del software libre: Firefox, GIMP, Chromium, VLC, mPlayer. Libre / Open Office y la lista es extensa. A nivel binario las versiones para cada sistema operativo son diferentes.

+1
0
-1

Saludos desde México
Mi Web: El Gato con Linux

Imagen de nolin
+1
0
-1

Gracias por vuestras respuestas.

Creo que al final voy a hacer para cada plataforma dos máquinas virtuales: una con todos los archivos de desarrollo y otra "limpia". En la primera compilo y en la segunda pruebo. Así, si me faltan dependencias, lo detectaré.
Si quiero cuatro versiones (w32, w64, u32, u64) necesito ocho VM. Cuestión de espacio en el disco y paciencia de instalar los SO.

Para que mi programa en C++ sea multiplataforma me apoyo en las librerías wxWidgets.

+1
0
-1