Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: patilanz en 29 Mayo 2014, 07:54 AM

Título: Visual studio 2012 MSVCR dll falta
Publicado por: patilanz en 29 Mayo 2014, 07:54 AM
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
Título: Re: Visual studio 2012 MSVCR dll falta
Publicado por: 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
Título: Re: Visual studio 2012 MSVCR dll falta
Publicado por: Eternal Idol en 29 Mayo 2014, 08:48 AM
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) (http://msdn.microsoft.com/en-us/library/2kzt1wy3.aspx)
Título: Re: Visual studio 2012 MSVCR dll falta
Publicado por: 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.
Título: Re: Visual studio 2012 MSVCR dll falta
Publicado por: Eternal Idol en 29 Mayo 2014, 09:19 AM
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).
Título: Re: Visual studio 2012 MSVCR dll falta
Publicado por: x64core en 29 Mayo 2014, 18:54 PM
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.
Título: Re: Visual studio 2012 MSVCR dll falta
Publicado por: patilanz en 30 Mayo 2014, 18:17 PM
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  :-(
Título: Re: Visual studio 2012 MSVCR dll falta
Publicado por: Eternal Idol en 30 Mayo 2014, 18:25 PM
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 (http://en.wikipedia.org/wiki/Static_library) cuyo codigo binario paso a formar parte de tu programa.
Título: Re: Visual studio 2012 MSVCR dll falta
Publicado por: patilanz en 30 Mayo 2014, 18:40 PM
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.
Título: Re: Visual studio 2012 MSVCR dll falta
Publicado por: Eternal Idol en 30 Mayo 2014, 18:48 PM
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 (http://www.dependencywalker.com/) 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.
Título: Re: Visual studio 2012 MSVCR dll falta
Publicado por: patilanz en 30 Mayo 2014, 22:39 PM
Me he descargado el dependecy walker y lo miro enseguida pero me surgio otro problema al asignar la biblioteca a /MT que me aparecieron un monton de externos sin resolver del archivo libcpmtd.lib. Antes lo estaba cambiando en un archivo que tenia solo la funcion main por probar pero cuando lo cambie en el chat que tengo hecho paso esto. Los includes son:

Código (cpp) [Seleccionar]
#include "stdafx.h"
#include <iostream>
#include <thread>
#include <Windows.h>

//No importante
#include "array_data.cpp"
#include "user.cpp"
#include "errors.cpp"
#include "msgs.cpp"
#include "msg.cpp"
#include "connection_msg.cpp"
//No importante

using namespace std;

#pragma comment(lib,"ws2_32.lib")


Lo de crear mi libreria como me dijiste lo voy a dejar y algún día creare la mia :D

Porque pasa lo anterior? |Gracias|
Título: Re: Visual studio 2012 MSVCR dll falta
Publicado por: Eternal Idol en 30 Mayo 2014, 22:50 PM
Cada archivo fuente (.cpp) tiene que estar configurado con /MT, en cada configuracion (Debug y Release normalmente). Despues dale a Rebuild solution (Ctrl+Alt+F7).
Título: Re: Visual studio 2012 MSVCR dll falta
Publicado por: patilanz en 30 Mayo 2014, 23:23 PM
Pero si desde la configuracion creo que lo hace a todos archivos, sigo esto:
http://msdn.microsoft.com/en-us/library/2kzt1wy3.aspx
En la parte de "To set this compiler option in the Visual Studio development environment" y sigo los pasos.

Como lo hago por separado en cada archivo?
Título: Re: Visual studio 2012 MSVCR dll falta
Publicado por: Eternal Idol en 30 Mayo 2014, 23:40 PM
Solution Explorer, boton derecho del mouse en cada archivo, Properties, C/C++, Code Generation y comproba que concuerden todos en Runtime Library.
Título: Re: Visual studio 2012 MSVCR dll falta
Publicado por: patilanz en 31 Mayo 2014, 00:43 AM
Vale comprobé todo lo del explorador y todo estaba bien, los archivos cpp.
Probe creando un nuevo proyecto y copie todos los archivos y el código fuente de nuevo. Luego cambie el conjunto de herramientas de la plataforma a Visual Studio 2012 - Windows XP (v110_xp) y la biblioteca en tiempo de ejecutacion a MT. Comprobe los archivos todos estaban bien y al recompliar me sale otra ves lo de externos sin resolver.
Se me escapa algo?
Título: Re: Visual studio 2012 MSVCR dll falta
Publicado por: x64core en 31 Mayo 2014, 03:10 AM
Cita de: patilanz en 31 Mayo 2014, 00:43 AM
Vale comprobé todo lo del explorador y todo estaba bien, los archivos cpp.
Probe creando un nuevo proyecto y copie todos los archivos y el código fuente de nuevo. Luego cambie el conjunto de herramientas de la plataforma a Visual Studio 2012 - Windows XP (v110_xp) y la biblioteca en tiempo de ejecutacion a MT. Comprobe los archivos todos estaban bien y al recompliar me sale otra ves lo de externos sin resolver.
Se me escapa algo?
¿Cuales son los simbolos que te muestra? (libcpmtd.lib?) Pero luce como que alguien a estado jodiendo en la configuración por defecto.
Título: Re: Visual studio 2012 MSVCR dll falta
Publicado por: patilanz en 31 Mayo 2014, 12:01 PM
Si que he tocado cosas para experimentar pero no creo que he hecho algo.
Los errores son estos:
(http://fotos.subefotos.com/9278b956fbb19a74a20d1e5b388db906o.png)
Título: Re: Visual studio 2012 MSVCR dll falta
Publicado por: Eternal Idol en 31 Mayo 2014, 13:07 PM
En Debug usa /MTd (en Release /MT).
Título: Re: Visual studio 2012 MSVCR dll falta
Publicado por: patilanz en 1 Junio 2014, 13:13 PM
Si esto era. Pero como te enteraste de que ahi estaba el problema. Los errores del compilador a mi por lo menos no me indican nada de que tiene que ser MT en release y MTd en debug.

De donde aprendiste tanto sobre visual studio?

Saludos
Título: Re: Visual studio 2012 MSVCR dll falta
Publicado por: Eternal Idol en 1 Junio 2014, 14:48 PM
Por los simbolos de debug que no era capaz de resolver el enlazador (linker),  en la MSDN dice:


/MT Causes the application to use the multithread, static version of the run-time library. Defines _MT and causes the compiler to place the library name LIBCMT.lib into the .obj file so that the linker will use LIBCMT.lib to resolve external symbols.

/MTd Defines _DEBUG and _MT. This option also causes the compiler to place the library name LIBCMTD.lib into the .obj file so that the linker will use LIBCMTD.lib to resolve external symbols