Visual studio 2012 MSVCR dll falta

Iniciado por patilanz, 29 Mayo 2014, 07:54 AM

0 Miembros y 3 Visitantes están viendo este tema.

patilanz

Hola al escribir programas de consola con visual studio 2012 con c++ y luego si paso el exe a otro os windows me lanza el error de que falta un MSVCR*.dll
He buscado por la red pero todos decían que tengo que instalar el package de microsoft visual en la otra maquina. Pero si estoy creando un virus o algo que necesita abrirse sin obligar al usuario instalar nada que hago?
Tengo que usar otro compilador o puedo incluir el archivo en el ejecutable?

Alguna sugerencia?

Saludos

engel lex

XD por eso el visual estudio es malo! XD programa "eficientemente" pero depende de las dll... si estás haciendo un virus, solicitale al cliente que se descargue el pack y lo instale para infectarlo
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Eternal Idol

#2
No, podes usar el VS - VC++ es el mejor compilador de C++ para Windows - perfectamente, en lugar de incluir la RTL como una DLL incluila como una libreria estatica. Ademas podes crear tu propia RTL que incluya solamente las funciones que usa tu programa y asi reducir el tamaño de la misma al minimo imprescindible.

Configuralo para /MT:
/MD, /MT, /LD (Use Run-Time Library)
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

eferion

Los compiladores, al menos en Windows, suelen enlazar los programas que generan con unas librerías propias del compilador. Estas librerías son necesarias porque tienen el código necesario para poder enlazar con la api de Windows.

* Si compilas con msvc tendrás que arrastrar MSVCR[00].DLL o MSVCP[00].DLL, dependiendo de si el programa se compila en C o en C++. nota: [00] se sustituye por la versión del compilador.

* Si compilas con mingw, tienes que copiar junto a tu programa la librería MINGWM[00].DLL.

Eternal Idol

Cita de: eferion en 29 Mayo 2014, 09:00 AM
Los compiladores, al menos en Windows, suelen enlazar los programas que generan con unas librerías propias del compilador. Estas librerías son necesarias porque tienen el código necesario para poder enlazar con la api de Windows.

* Si compilas con msvc tendrás que arrastrar MSVCR[00].DLL o MSVCP[00].DLL, dependiendo de si el programa se compila en C o en C++. nota: [00] se sustituye por la versión del compilador.

* Si compilas con mingw, tienes que copiar junto a tu programa la librería MINGWM[00].DLL.


No necesariamente, como ya explique esa es la RTL (Run Time Library), se puede omitir y se puede configurar para que use una libreria estatica (no de importacion).
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

x64core

Cita de: engel lex en 29 Mayo 2014, 08:06 AM
XD por eso el visual estudio es malo! XD programa "eficientemente" pero depende de las dll... si estás haciendo un virus, solicitale al cliente que se descargue el pack y lo instale para infectarlo
No, VS/VC++ no es malo , malo son las personas que no saben como usarlo. Como dijo Eternal Idol, VC++ es el mejor compilador
de C++ para Windows que existe. Mil veces prefiero usar VC++ que esos otros apestosos compiladores. La solucion ya te ha
dado Eternal Idol.

Además podes usar la vieja mscvrt.dll podes tomar el lib del WDK de preferencia aunque eso sirve sólamente para programas C, y aún
asi no es 100% efectivo.

patilanz

Eternal Idol gracias por tu respuesta al cambiar lo a mt funciona perfecto pero no me queda claro que he hecho. Me puedes explicar como es esto de las librerias dll?

Me gusta mucho vc++ pero soy de esa gente mala que no sabe usarlo  :-(

Eternal Idol

De nada, lo que hiciste es cambiar la forma en tu programa usa la RTL (Run Time Library), en lugar de usar una DLL independiente usas una libreria estatica cuyo codigo binario paso a formar parte de tu programa.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

patilanz

Entonces antes buscaba las librerias en el os pero como son nuevas y no están en windows xp o se tienen que descargar me muestra el error pero ahora forman parte del programa. Y como agrego mi librería RTL ? Seria una archivo dll pero no se como se linkea y luego no se que tiene que haber dentro para que no haya problemas.

Eternal Idol

Cita de: patilanz en 30 Mayo 2014, 18:40 PMEntonces antes buscaba las librerias en el os pero como son nuevas y no están en windows xp o se tienen que descargar me muestra el error pero ahora forman parte del programa.

Si, podes comparar los ejecutables con el Dependency Walker para ver la diferencia, en el original tendras como dependencia a MSVC???.DLL y en el nuevo no.

Cita de: patilanz en 30 Mayo 2014, 18:40 PMY como agrego mi librería RTL ? Seria una archivo dll pero no se como se linkea y luego no se que tiene que haber dentro para que no haya problemas.

No hace falta realmente y me parece que no estas listo para eso; seria otra libreria estatica con las funciones que use tu programa.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón