2010-01-18 6 views
15

que tengo algunas dudas sobre cygwin:
algunos temas de (socket, hilo, otras cuestiones de programación y concha) Cygwin [Linux en Windows]

  1. ¿Puedo usar Cygwin desarrollar zócalo de código basado?
  2. ¿Tiene Cygwin funciones de read() y write() que funcionan con los descriptores de archivos?
  3. ¿Puedo usar la biblioteca Pthread en Cygwin?
  4. ¿El código que compila en Cygwin también compila en Linux sin ningún cambio o con pocos cambios?
  5. ¿Se ejecutará un archivo ejecutable creado por Cygwin en Linux?
  6. ¿Por qué Cygwin no necesita el vinculador opción -lpthread cuando uso la biblioteca pthread?
  7. ¿por qué en #include <iostream> no necesito usar using namespace std;?
  8. ¿Puedo trabajar con QT en Cygwin? ¿Si es así, cómo?
  9. ¿Puedo iniciar mi Linux en otra partición
  10. con Cygwin y usarla?
  11. ¿Puedo acceder a la otra partición que es EXT3 en Cygwin?

Respuesta

14

En 1: Sí. Las bibliotecas de zócalos se envían con Cygwin; muchas aplicaciones basadas en zócalos como web servers se incluyen en la distribución base.

En 2: Sí. Creo que todas las llamadas al sistema 'sección 2 y 3' en el tiempo de ejecución de GNU C y la biblioteca están implementadas por el runtume cygwin. Puede verificar esto en las páginas man que vienen con Cygwin. Una lista de llamadas al sistema y las llamadas lib std implementd por Cygwin se puede encontrar here.

El 3: Sí. Pthread está incluido en Cygwin.La lista a la que se hace referencia en el link above menciona pthreads también.

En 4: Cualquier cosa creada en contra de las librerías GNU debería funcionar con poco o ningún cambio entre Cygwin y Linux (suponiendo que no faltan dependencias en Cygwin). Dependiendo de la arquitectura de la CPU, puede tener que preocuparse por word alignment, endianness y otros problemas de puertos específicos de la arquitectura, pero si está apuntando a Windows y Linux en Intel, su código tendría pocos problemas de puertos que surjan de la arquitectura de la CPU.

En 5: Cygwin creará un programa contra sus propias bibliotecas compartidas de forma predeterminada, pero GCC puede realizar una compilación cruzada para apuntar a otras plataformas. Podría (en teoría) configurar GCC para realizar una compilación cruzada con cualquier objetivo admitido por el compilador. Hay plenty of resources on the web sobre la compilación cruzada con GCC, y no creo que el proceso sea sustancialmente diferente en Cygwin.

Tenga en cuenta que los binarios de Cygwin no se ejecutarán en Linux, o viceversa. Aún necesitarás compilaciones separadas para ambos.

El 6: No estoy seguro - en un supongo que está incluido en el tiempo de ejecución estándar, tal vez porque era necesario para envolver la API de Win32 enhebrado por alguna razón.

En 7: No lo sé - es probablemente lo mismo en g ++ en todas las plataformas. Aparentemente un error del compilador. Dan Moulding's Answer cubre esto con más detalle.

En 8: Sí. IIRC QT is available in the standard builds y seguramente se compilará en Cygwin. Al igual que con Linux/Unix, QT en Cygwin usa un back-end X11, por lo que necesitará tener un servidor X como XMing en ejecución.

Para evitar la dependencia de un servidor X es posible que desee build QT apps against the Win32 API,. Es posible hacerlo con MinGW, que es un conjunto de archivos de encabezado y bibliotecas para compilar aplicaciones Win32 nativas con GCC. MinGW se puede utilizar desde un entorno Cygwin (un ejemplo de GCC en la compilación cruzada de Cygwin con un objetivo que no es Cygwin) y el installer desde cygwin.com le ofrece la opción de instalarlo.

MinGW es bastante maduro; tiene todos los "sospechosos habituales": bibliotecas y archivos de cabecera que esperaría encontrar en un entorno de desarrollo GCC Unix/Linux y es muy estable. Es es a menudo la herramienta de elección para construir puertos Win32 de software de código abierto porque es (a) libre, (b) admite las bibliotecas utilizadas por el software y (c) usa GCC para que no se vea afectado por variaciones dialécticas entre MSVC y GCC.

Sin embargo, estas variaciones dialécticas en el idioma y las bibliotecas disponibles (por ejemplo, MSVC no viene con una implementación de getopt) significa que los programas de migración entre MinGW y MSVC pueden ser bastante complicados. Mi experiencia, aunque no es terriblemente extensa, ya que solo he hecho esto algunas veces, es que transferir aplicaciones entre MinGW32 y Linux es más fácil que migrar entre MinGW y MSVC. Obviamente, las aplicaciones con dependencias no portátiles como el uso de API específico de Win32 requerirían que los componentes dependientes sean reescritos para la nueva plataforma, pero usted tendrá muchos menos problemas con las diferencias en las librerías estándar, archivos de encabezado y dialecto de lenguaje.

QT hace un buen trabajo al proporcionar una capa de abstracción de plataforma. Proporciona API para acceso a bases de datos, subprocesos, E/S y muchos otros servicios, además de la GUI.Usar las API de QT donde sea posible debería ayudar con la portabilidad y las librerías de Unix/Linux que vienen con MinGW significan que podría darle una buena plataforma para hacer aplicaciones que realizarán un puerto entre Win32 y Linux con relativamente poco código dependiente de la plataforma.

EDIT: Los paquetes de desarrollo de QT en Cygwin son:

  • Qt4: framework de aplicaciones Qt (fuente)
  • -devel-herramientas de Qt4: Qt4 Asistente, Designer y lingüista
  • Qt4 -doc: documentación API Qt4
  • qt4-qtconfig: Qt4 aplicación de configuración de escritorio
  • qt4-qtdemo: demos y ejemplos Qt4

Probablemente también necesite gcc4-g ++ y algunas otras partes y piezas. This listing on the cygwin web site tiene una lista de los paquetes.

+0

para usar QT en cygwin ¿qué paquete debe instalar? – SjB

+0

qt4- * - ver la edición. – ConcernedOfTunbridgeWells

+0

¡Gracias, buena respuesta en QT! – SjB

2

Sí, Sí, Sí, Sí (si se escribe con cuidado y no utiliza nada específico a cygwin), Nº

El 5: puede ser posible compilar en forma cruzada a partir de Cygwin Linux, realmente no lo sé. Si es así, entonces técnicamente algunos ejecutables "creados por Cygwin" se ejecutarían en Linux. Pero los ejecutables de Cygwin no se ejecutarán en Linux.

3

"Sí" a todos los que no sean 5. Tendrá que crear sus ejecutables por separado para Linux, pero eso debería ser sencillo ya que la respuesta a 4 es "sí".

Asegúrese de instalar todos los encabezados de desarrollo que necesita en ambas plataformas.

1

En respuesta al # 7, la versión del compilador de C++ que tiene probablemente esté desactualizada. Si usted no necesita la portabilidad Linux/POSIX, me cambio a la no cygwin compilador GCC MinGW - 4.4.1 se puede obtener en http://tdragon.net/recentgcc/

+0

Uso gcc 4 en Cygwin – SjB

1

Respecto 6, no es necesario -lpthread porque el apoyo es Pthreads parte de la DLL Cygwin.

+0

Gracias buena respuesta – SjB

2

1-4: Las respuestas a todas ellas son todas "sí", porque todas estas características que usted pregunta son parte del estándar POSIX. Cygwin es básicamente una capa POSIX para Windows, por lo que, naturalmente, Cygwin incluye todas estas características.

5: No, los binarios de Cygwin no se ejecutarán bajo el kernel de Linux, porque en última instancia el código generado por Cygwin es el código nativo de Windows. Se vinculará con las DLL de Windows habituales (como kernel32.dll), mientras que Linux ni siquiera tiene una noción de DLL (ha compartido objetos que son similares, pero diferentes). Más importante aún, los ejecutables creados bajo Cygwin estarán en formato PE, pero Linux generalmente usa el formato ELF para ejecutables. Podría, por supuesto, hacer compilación cruzada bajo Cygwin y, por lo tanto, generar ejecutables nativos de Linux, pero no parece que esto es lo que está buscando. Además, compilar una nueva versión de GCC para usar como compilador cruzado bajo Cygwin probablemente no sea una tarea trivial.

6: GCC bajo Cygwin no requiere el uso de -lpthread porque todo el código pthread bajo Cygwin es en cygwin1.dll que siempre está vinculado de forma predeterminada.

7:This is a bug in GCC (en todas las plataformas). Ha existido por un tiempo largo y probablemente nunca será reparado.

8: ConcernedOfTunbridgeWells hizo un gran trabajo explicando esto, por lo que no me queda mucho por decir. Sin embargo, vale la pena señalar que Cygwin tiene X.org X Window System en su lista de paquetes. Con Cygwin 1.7.x, configurarlo y usarlo es breeze y parece bastante sólida como una roca. Si quieres usar Qt con X, te recomendaría usar el servidor X de Cygwin.

+0

+1 para una respuesta convincente al n. ° 7, aunque Xming es un mejor servidor X de propósito general que el estándar Cygwin. IMO XMing es casi tan bueno como Starnet. – ConcernedOfTunbridgeWells

Cuestiones relacionadas