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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top