Se dice que al usar C/C++, uno puede escribir programas 'nativos', que se ejecutan en la plataforma. Estoy confundido acerca de lo que se considera nativo: ¿la arquitectura del procesador o la versión del sistema operativo?¿Estoy codificando para un sistema operativo o el procesador?
Por ejemplo:
tengo un procesador de 32 bits y Windows 7 (32 bits), y compilo y generar y archivo .exe. ¿Está garantizado para ejecutarse en cualquier Windows 7 32 Bit? (Win 7 32 bit en máquinas de 32/64 bits)
Edit1: No pretendía solo el sistema operativo Windows aquí. Mi ejemplo también se puede extender a Linux. Por ejemplo, generar un archivo ejecutable (de manera predeterminada a.out
) en un sistema operativo Linux de 32 bits que se ejecuta en un procesador de 32 bits y luego ejecutarlo en un Linux de 32 bits en un procesador de 64 bits.
Edit2: Gracias por las respuestas, pero también tenía la intención de utilizar las bibliotecas y funciones estándar, nada específico del sistema operativo. Solo una vez especificado por el estándar ANSI o ISO C++. No hay referencias a sistemas de ventanas específicos del sistema operativo u otras bibliotecas. Gracias
+1 para explicar la diferencia entre * codificación * y * compilación para * una plataforma. –
+1 para referirse a la "compatibilidad binaria". Pero no me refiero a la compatibilidad binaria multiplataforma: me refería a los binarios de Windows en los binarios de Windows y Linux en Linux (aunque en arquitecturas diferentes, como el sistema operativo de 32 bits en 32/64 y otras arquitecturas) – Sekhar
@ user331225: para dos arquitecturas distintas , el código generado será diferente. Tenga en cuenta que x86-64 es solo una extensión de x86 y no es una arquitectura fundamentalmente diferente. Es por eso que las aplicaciones de 32 bits x86 se pueden ejecutar en x86-64. Está diseñado para ser compatible con x86. Para dejar en claro el punto, no puede ejecutar binarios Linux/ARM de 32 bits en Linux/x86 de 32 bits. –