Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: river_0119 en 20 Mayo 2010, 18:27 pm



Título: Quitar msvcr90.dll de proyecto - visual c++ 2008
Publicado por: river_0119 en 20 Mayo 2010, 18:27 pm
Hace un tiempo que vengo usando visual c++ 2008, me encanta. ;D

El problema esta cuando quiero compartir mis programas salta un cartelito que dice que falta el msvcr90.dll. :-(

Y para colmo yo no recuerdo usar esa dll. Hay alguna manera de solucionar esto? :-\

 :¬¬


Título: Re: Quitar msvcr90.dll de proyecto - visual c++ 2008
Publicado por: Eternal Idol en 21 Mayo 2010, 11:18 am
Busca las opciones de la Run Time Library, lo que queres es que sea una libreria estatica (.lib), de esta manera tu ejecutable sera mas grande al contenerla pero no tendra dependencias por la RTL.


Título: Re: Quitar msvcr90.dll de proyecto - visual c++ 2008
Publicado por: [Zero] en 22 Mayo 2010, 01:21 am
Para linkear la RTL como .lib vas a Project->Properties->C/C++->Code Generation y en "Runtime Library" pones Multi-threaded (/MT) .

Si no necesitas las API's de la RTL usa la directiva "/NODEFAULTLIB" en el linker, pero seguro te canta algún error que tendrás que arreglar.

Saludos  :P


Título: Re: Quitar msvcr90.dll de proyecto - visual c++ 2008
Publicado por: river_0119 en 22 Mayo 2010, 14:16 pm
me salen estos errores  :huh:

main.obj : error LNK2001: unresolved external symbol __imp__fopen
main.obj : error LNK2001: unresolved external symbol __imp__fprintf
main.obj : error LNK2001: unresolved external symbol __imp__fclose
LINK : error LNK2001: unresolved external symbol _WinMainCRTStartup

creo que me paso a devcpp, pero este no incluye gdi+  :(

seguire intentando


Título: Re: Quitar msvcr90.dll de proyecto - visual c++ 2008
Publicado por: Eternal Idol en 22 Mayo 2010, 14:40 pm
Eso es por usar, sin necesidad, el /NODEFAULTLIB. Para Windows VC++ es el mejor compilador, no te cambies, lee un poco la ayuda.


Título: Re: Quitar msvcr90.dll de proyecto - visual c++ 2008
Publicado por: [Zero] en 22 Mayo 2010, 15:03 pm
me salen estos errores  :huh:

main.obj : error LNK2001: unresolved external symbol __imp__fopen
main.obj : error LNK2001: unresolved external symbol __imp__fprintf
main.obj : error LNK2001: unresolved external symbol __imp__fclose
LINK : error LNK2001: unresolved external symbol _WinMainCRTStartup

creo que me paso a devcpp, pero este no incluye gdi+  :(

seguire intentando

Jaja, claro, es que SÍ estás usando apis de la RTL, entonces no puedes usar /NODEFAULTLIB. Haz el cambio que te dije para compilar con el lib de la RTL y listo, como dice Eternal Idol, VC++ es el mejor  :P .

Saludos


Título: Re: Quitar msvcr90.dll de proyecto - visual c++ 2008
Publicado por: river_0119 en 22 Mayo 2010, 15:43 pm
 ;-) funciona a la perfeccion

pero el problema es que incrementa el tamano del ejecutable de 9KB a 62KB

 ;D

talvez pueda solucionar los problemas anteriores con otros metodos :-\
[/NODEFAULTLIB]

para los tres primeros creo que puedo usar las apis de windows,
y para el ultimo error e visto un manual de crear un runtime propio o algo asi (no recuerdo donde e visto eso)

estoy en lo correcto?
 ;D






Título: Re: Quitar msvcr90.dll de proyecto - visual c++ 2008
Publicado por: Eternal Idol en 22 Mayo 2010, 16:40 pm
¿62KB es un problema?


Título: Re: Quitar msvcr90.dll de proyecto - visual c++ 2008
Publicado por: river_0119 en 23 Mayo 2010, 17:58 pm
si :)


Título: Re: Quitar msvcr90.dll de proyecto - visual c++ 2008
Publicado por: Eternal Idol en 23 Mayo 2010, 21:39 pm
¿Existe alguna razon real?


Título: Re: Quitar msvcr90.dll de proyecto - visual c++ 2008
Publicado por: [Zero] en 24 Mayo 2010, 15:33 pm
Si es un problema limitate a no usar la CRT, y usa sólo API's de Win:

main.obj : error LNK2001: unresolved external symbol __imp__fopen: Cambia fopen por CreateFile (http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx)

main.obj : error LNK2001: unresolved external symbol __imp__fprintf: WriteFile (http://msdn.microsoft.com/en-us/library/aa365747(VS.85).aspx)

main.obj : error LNK2001: unresolved external symbol __imp__fclose:  CloseHandle (http://msdn.microsoft.com/en-us/library/ms724211(VS.85).aspx)

LINK : error LNK2001: unresolved external symbol _WinMainCRTStartup: Utiliza la directiva /ENTRY:main

O construye tu CRT (http://www.solocodigo.com/index.php?opt=viewitem&id=177&type=4&node=1), puedes redefinir las API's que te dan error como implementaciones de las API's de Win antes mencionadas.

Saludos


Título: Re: Quitar msvcr90.dll de proyecto - visual c++ 2008
Publicado por: river_0119 en 29 Mayo 2010, 16:18 pm
gracias a todos por su la ayuda  ;-)

pero hay un detalle que no he podido solucionar

cuando pongo el  "/NODEFAULTLIB" quita todas las lib. incluso las que estoy declarando, por ejemplo
#pragma comment(lib, "psapi.lib")

se que  "/NODEFAULTLIB" tiene una opcion para quitar solo la lib deseada, en este caso solo quiero quitar la lib de msvcr90.dll

 :silbar:

EI: juntando mensajes,

tal vez a alguien le interese

con esto quito la msvcr90.dll
#pragma comment(linker, "/NODEFAULTLIB:MSVCRT.lib")


me daban algunos errores y agrege esta lib
#pragma comment(lib, "libcmt.lib")

y problema solucionado

y tambien tuve que quitar el archivo manifest porque sino daba otro error

 :-X

esta bien lo que estoy haciendo?