ventajas sistema proposito operativo open desventajas caracteristicas c windows unix cross-platform cross-compiling

sistema - ¿Cómo puedo compilar de forma cruzada código C en Windows para que un binario también se ejecute en Unix(Solaris/HPUX/Linux)?



solaris caracteristicas (7)

El compilador cruzado es muy difícil de configurar y funciona correctamente.

Considere que (la gente de) NetBSD tiene que dedicar una gran cantidad de trabajo para hacer que la compilación cruzada funcione, y están ejecutando el mismo sistema operativo, solo arquitecturas diferentes.

Tendría que, al menos, copiar todos los encabezados de los otros sistemas operativos a Windows, y obtener un compilador cruzado, un enlazador, etc. para el sistema operativo / arquitectura de destino.

Además, es posible que esto no sea posible: las bibliotecas compartidas y perl pueden compilarse con un compilador nativo / no gcc que no estará disponible para Windows en absoluto.

Estuve investigando Cygwin / Mingw / lcc y me gustó poder compilar extensiones C nativas de C en mis ventanas (preferiblemente bajo cygwin) y luego ejecutarlas en Solaris y HP Unix sin más problemas, ¿es posible?

Todo esto proviene de mi pregunta Perl multiplataforma original aquí .


Esto no se puede hacer ... ¿pero es una gran molestia recompilar el código bajo Solaris o HP?


No, esto no es posible a nivel binario. Hay tantas diferencias a nivel binario entre los diversos SO y CPU.

Pero lo que puedes hacer es compatibilizar la fuente de tus extensiones C para que pueda compilarse en diferentes plataformas. C fue diseñado como un "lenguaje ensamblador portátil". Mientras se quede con las rutinas que son multiplataforma, entonces usualmente funcionarán de la misma manera. Todavía tendrá que probar porque podría haber errores que existen en una plataforma en particular.


Compile en Windows y luego use Wine para ejecutarlos en cualquier * nix. Funciona bien la mayor parte del tiempo.



(Esta es una pregunta muy antigua, pero falta algo de información útil; personalmente he hecho esto para Solaris (SPARC & x86), AIX, HP-UX y Linux (x86, x64).)

  • La compilación cruzada de C ++ es mucho más difícil que la C.

  • HP-UX 32 bits PA-RISC no es compatible porque usa formato SOM en lugar de ELF y binutils no admite (y probablemente nunca) SOM. En otras palabras, solo puede compilar de forma cruzada PA-RISC de 64 bits. (Requiere un chip PA-RISC 2.0)

  • Me gustaría ir con mingw en lugar de cygwin, si puedes. Cygwin introduce una gran cantidad de dolores de cabeza de permisos de archivos y dependencias cygwin1.dll que pueden ser problemáticos. Si es posible, sin embargo, compila en Linux. Todo será mucho más rápido porque todas las herramientas y scripts que está ejecutando están diseñados para un entorno en el que exec y stat son operaciones rápidas. Windows + NTFS no es ese entorno.

  • Comience con el script crosstools, pero prepárese para pasar mucho tiempo en esto.

  • Pruebe con la última versión de gcc / binutuils primero, pero si no puede superar los problemas intente regresar a paquetes anteriores. Por ejemplo, para Power3 (AIX) el compilador cruzado de la serie gcc 4.x genera código incorrecto, 3.x está bien.

  • Al copiar bibliotecas y encabezados nativos, asegúrese de que está copiando desde la máquina más antigua en la que probablemente se ejecutará. Copiar una nueva libc significa que su código no se ejecutará en ninguna máquina con una libc más antigua.

  • Al copiar libretas y encabezados nativos, probablemente desee ''tar -h'' para convertir enlaces simbólicos en archivos reales, también observe que en Solaris algunos archivos de objetos crt necesarios están enterrados en un directorio cc, no en / usr / lib


Estoy de acuerdo con Douglas en que hacer un compilador cruzado y trabajar es muy difícil de hacer. Esto es generalmente, su elección de último recurso. Si está aplicando un bucle de arranque, o está haciendo un binario para un dispositivo integrado, a menudo la compilación cruzada es su única opción. Debería sentirse cómodo compilando su propio gcc bajo Cygwin antes de considerar la compilación cruzada. Para realizar una compilación cruzada, debe compilar un gcc para ejecutarlo en Windows, pero que creará binarios para su plataforma de ejecución. Las instrucciones de muestra para hacer esto se pueden encontrar aquí .

Quizás quiera cruzar la compilación porque no tiene root y / o no puede compilar en su plataforma de destino. Por ejemplo, tenía un proveedor de alojamiento que ejecutaba Redhat Linux. Podía ejecutar scripts Perl CGI y módulos asociados, pero no podía compilar en el equipo de destino, y las bibliotecas que construía tenían que existir en mi propio directorio.

Para resolver esto, podría haber intentado compilar en forma cruzada para mi plataforma de destino, pero en su lugar, decidí configurar un host similar dentro de una máquina virtual en Windows. Desde dentro de Cygwin, puede crear un script que tenga ssh en su VM, copie su fuente y realice una configuración / compilación completa. El último paso fue implementar el artefacto binario en mi sistema alojado.

Logré ejecutar tanto Solaris 10 como Open Solaris en una máquina virtual en Windows. Desafortunadamente, es posible que tenga más dificultades para ejecutar HPUX en una máquina virtual.