2012-01-03 15 views
7

Si el código compilado por un compilador visual de C++ es C++ directo, ¿por qué necesita un paquete redistribuible? ¿Esto hace que su plataforma de código sea dependiente? ¿El uso del compilador visual de C++ con el paquete redistribuible proporciona alguna ventaja sobre el uso de otro IDE junto con g ++?¿Por qué se requiere el paquete redistribuible de Visual C++?

+2

código compilado es siempre * * dependiente de la plataforma. Funciona en, y solo en, la plataforma para la que fue compilado. –

+1

No es obligatorio. Debería crear un proyecto de instalación en su lugar. O compila con/MT en lugar de/MD para que no lo necesites en absoluto. Arriesgado sin embargo cuando usas DLL. –

Respuesta

6

El código no depende de la plataforma, el resultante es ejecutable. Está vinculado a las bibliotecas MS con la implementación estándar de la biblioteca, que se incluyen en la redistribuible como DLL.

IIRC debería haber una opción para la vinculación estática de todo, de modo que no necesitaría la redistribución adicional, pero el binario resultante seguiría dependiendo de la plataforma; por ejemplo, no puede ejecutar un binario de Windows en un UNIX sistema (sin WINE al menos).

+2

Tiene la opción de incluir el administrador de memoria, la biblioteca de E/S estándar y, por ejemplo, una copia separada en cada aplicación, sin una buena forma de administrarlo y actualizarlo y toneladas de distorsión, o para instalar una única ejecución. tiempo que contiene todo ese código una vez para cada aplicación que pueda necesitarlo. –

+0

@DavidSchwartz, sí ... Y creo que está incluido por defecto en todas las instalaciones de Windows, ¿verdad? – littleadv

+1

Depende de qué instalación de Windows y qué tiempo de ejecución. Una nueva instalación de Windows Vista SP1, por ejemplo (si alguien todavía instala eso) no tendrá el tiempo de ejecución VS2010. –

5

No existe tal cosa como "Straight C++". Siempre habrá algunas funciones de la biblioteca a las que llamará aquí y allá en su código, e incluso si tiene mucho cuidado de no hacerlo, habrá algunas funciones que deberán ser llamadas simplemente por el código emitido por el compilador. Por ejemplo, si tiene el siguiente ciclo:

for(int i = 0; i < count; i++) 
    array1[i] = array2[i]; 

El compilador lo reemplazará con un código que simplemente copie la memoria. Y si está compilando para un tamaño más pequeño en lugar de velocidad, esta será una llamada a una función muy similar a memmove().

Además, es posible que tenga algunas operaciones de punto flotante para las cuales no existen instrucciones equivalentes directas de x86; estos también se implementarán con llamadas a funciones. Y la lista continúa.

Esto no hace que la plataforma de su código dependa, porque en una plataforma diferente, el compilador de ese plafrom compilará el mismo código suyo para ir con lo que sea el tiempo de ejecución de C++ para esa plataforma.

Afortunadamente, el tiempo de ejecución de C++ no tiene que ser una entidad separada de la aplicación. Comprueba tus opciones de compilador y enlazador; deberías poder producir un único ejecutable que contenga ambos. Si ha encontrado que g ++ no requiere un tiempo de ejecución por separado, es porque hace exactamente eso por defecto.

1

El C redistribuible ++ son específicos para el IDE que está utilizando ("IDE" digo, pero eso es muy específica para el compilador, sin embargo, el compilador IDE & son a la vez que se asignaron nuevas versiones como las cosas se mueven a lo largo.)

Está hecho específicamente para ese IDE, pero no para el sistema operativo Win. Por lo tanto, debe ser compatible con versiones anteriores (suponiendo que no esté utilizando nuevas API, obviamente). En realidad, esto se hace para que sea compatible con versiones anteriores (y no al revés, como está pensando). Esto le permite usar la última versión la mejor versión IDE (10, 11, 12 ...) y aún ejecuta su código en Win2k!

Ahora, por supuesto, es muy diferente de Linux, donde se espera que recompile en cada versión principal de todos modos. La mayoría de los sistemas Unix funcionarán de esa manera.

No conozco una forma de compilar C++ estáticamente para poder evitar esos redistribuibles. Es posible, aunque ciertamente haría tu .exe muy grande.

0

Guardo siempre una copia de Visual C++ 6 instalado en una máquina virtual xp (no funcionará correctamente en Win 6/7/8). A veces escribo o me piden que escriba una aplicación de utilidad para hacer algo rápido y/o una vez que compilo como un solo exe.Me cansé de enviar un programa simple escrito usando solo la biblioteca estándar a otra persona solo para que me digan que no funciona debido a la falta de dll o paquete redistribuible.

Cuestiones relacionadas