¿Cuáles son algunas recomendaciones para portar código C ++ a MacOS? [cerrado]
-
02-07-2019 - |
Pregunta
Para un próximo proyecto, hay planes para portar el código C ++ existente que se compila en Windows y Linux a MacOS (leopard). El software es una aplicación de línea de comando, pero se podría planificar una interfaz gráfica de usuario. MacOS usa el compilador g ++. Al tener el mismo compilador que Linux, no parece que haya problemas, pero siempre los hay.
¿Hay alguna recomendación o problema a tener en cuenta durante el puerto?
Solución
¿Su aplicación tiene una GUI y cuál (nativo / Qt / Gtk +)?
Si no, los problemas a tener en cuenta (en comparación con Linux) están principalmente en el área de enlace dinámico. OS X usa '-dylib' y '-bundle' y, de hecho, tiene dos tipos de bibliotecas dinámicas (tiempo de ejecución cargable y las normales). Linux solo tiene un tipo (compartido), y de todos modos es más flexible en esto.
Si su aplicación tiene una GUI, deberá volver a codificar todo en Cocoa, utilizando Objective-C. Lo que significa que también estará en un nuevo idioma . Algunas personas (como MS) han usado Carbon (C ++ API), pero se está eliminando gradualmente. No lo recomendaría a nuevos proyectos.
Tu mejor suerte es usar Qt o Gtk +. Un puerto nativo de Gtk + ha sido (re) anunciado hace solo unos días (vea Imendio ).
p.s. OS X, por supuesto, también ejecuta binarios X11, pero llevarlo a cualquiera de sus clientes podría ser un camino difícil. Están acostumbrados a la interfaz Aqua, y productivos con eso. Considere X11 solo como una solución a muy corto plazo.
p.p.s. La cantidad de bibliotecas de complementos de código abierto que vienen con OS X es limitada, y sus versiones pueden faltar. Mientras que en Linux puede requerir fácilmente que los usuarios tengan 'libxxx v.y.y' instalado, en OS X hay múltiples enfoques de empaquetado (fink, macports) y para una herramienta comercial se espera que las bibliotecas requeridas estén contenidas en la aplicación. OS X ofrece 'paquetes de aplicaciones' y 'marcos' para esto (copias locales, lo que hace que la aplicación sea autosuficiente). Linux no tiene ese concepto. Esto también tendrá un gran efecto en su sistema de compilación; ¿quizás quiera probar algo como SCons para todas las plataformas?
Otros consejos
No necesita recodificar todo en Objective-C. Hay una extraña bastardización de C ++ y Objective-C que le permitirá usar el código C ++ de Objective-C, por lo que podría dividir de forma inteligente el código del modelo en C ++ y el código de vista / controlador en Objective-C. Para usar Objective-C, simplemente agregue sus archivos de código fuente con .mm en lugar de .m, y puede mezclar la mayoría de las sintaxis legales de C ++ y Objective-C incluso en la misma línea.
No hemos estado portando a MacOS, pero hemos estado portando a varios Unixes desde Linux, el área de trabajo principal ha sido la instalación y los sistemas de arranque, así que espere poner la mayor parte del trabajo allí (dado que su actual ya está portátil entre Linux y Windows).
Macintosh (macosx) es esencialmente FreeBSD bajo el capó (aunque ha sido ajustado). Existen algunas diferencias en la programación de sistemas entre Linux y FreeBSD. Principalmente, estas diferencias existen entre las diversas llamadas al sistema ... por lo tanto, cuánto afectará esto dependerá de lo que esté haciendo su aplicación y qué tipo de llamadas al sistema operativo está haciendo durante la ejecución.