Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Linkear Msvcr71 Estaticamente?

Iniciado por Javi SJ Cervera, 05 de Septiembre de 2005, 11:25:42 PM

« anterior - próximo »

Javi SJ Cervera

 Muy buenas.

Estoy haciendo un programa en VC++ 2003, y al compilarlo, el ejecutable depende de la librería msvcr71.dll. Por desgracia, esta librería no es todo lo estándar que cabría esperar, algunos equipos de no-developers aún no la tienen, y preferiría no tener q meter la .dll junto al exe de mi programa en la versión final.

Alguien sabe si es posible linkear con una versión estática de esta librería?
== Jedive ==

zupervaca

 estas compilando en debug? es que esa dll no me suena a release, pero bueno nunca se sabe

saludos

Pogacha

 Eso me intriga ... yo trabajo con el visual c++ 6.0 ... para trabajar con vc 7.0, supongo que es lo mismo que el .net 2003, compilando en un exe independiente sin tener que depender del .net o ningun dll ni nada de esas cosas como venia haciendo con el vc++ 6.0?
Saludos
PD: perdon por la intromision pero creo que es la misma pregunta ...

Zaelsius

 Esa DLL contiene la libreria libc y alguna funcioncilla más. VC++ 7 usa msvcr7.dll, y VC++ 7.1(2003) usa la msvcr71.dll. Que yo sepa, no hay versión estática(edito: meeec! me he colao)

Esta pregunta ya la hizo ethernet en el foro de Codepixel, en este hilo :)

Si optas por incluir la DLL, tienes la opción de empaquetarla dentro del ejecutable con alguna herramienta tipo Molebox.

zupervaca

 para linkar estaticamente hace falta un .lib estatico (en linux los .lib siempre son estaticos, pero windows no tiene por que serlo), si te refieres a linkar estaticamente las mfc puedes hacerlo desde las propiedades del proyecto y poner algo asi era: usar mfc en una biblioteca estatica, por defecto en la mayoria de las aplicaciones creadas por el wizard viene establecido la compartida o librerias de windows generica.

saludos

editado: se me olvidaba, a la pregunta del hilo, pon que quieres las mfc estaticas y ya te tendria que funcionar

editado2: tio nos cruzamos los mensajes si parar jeje

editado3: mas sobre el tema http://msdn.microsoft.com/library/spa/defa...pplications.asp

Zaelsius

 Si, en MFC sí que habia estática.. parece que para la libc tambien, me colé  :P

Mirad la tablita en:
http://msdn.microsoft.com/library/default....e_libraries.asp

Segun eso, si la aplicación no es multi-hilo(p.ej.), tendrías que enlazar contra LIBC.LIB, y no MSVCRT.LIB(que dependería de la DLL).

Pogacha

 Entonces puedo programar con el vc++ 7.0 de la misma forma que lo hacia con el 6.0?
En code pixel decian como que no se podia o no para las intros ... entendi yo.
Pero esa tabla es contundente, yo me quiero pasar a algo mas nuevo pero tengo miedo de meter la pata y perder lo bueno por buscar lo mejor  <_< y luego no estar conforme con lo que tenia.

Saludos

Zaelsius

 El problema con las intros es que si enlazas estáticamente, te pasas de los 64kb, y entonces se sale fuera de la categoría.

Prueba con libc.lib, y comprueba si el ejecutable final depende de alguna DLL. Puedes usar esta aplicación, aunque hay cientos que tambien sirven(incluso te basta el notepad o un editor hexadecimal).

Pogacha

 Esta bien, pero aun no lo tengo instalado y no si ambas versiones pueden instalarse juntas.

Saludos

TheAzazel

 Pogacha, hace tiempo que me entro tu misma duda: sigo con el vc6 o me paso al 2003?
En general, yo no noto casi nada. Entrando en detalles, pues el interfaz es mas comodo, tiene mas optimizaciones para cpu nuevas(de dudosa utilidad jaja) y un C++ mas standard que nunca.
El lado negativo fue que tarda un poco mas en arrancar y que tendras que incluir las dll (si haces compilado dinamico) de microsoft. En un principio me parecio un toston pero estuve indagando y es completamente legal distribuir con tus aplicaciones las dll runtime que necesites por lo que ya no me complico la vida y las incluyo junto con la aplicacion.

Me preocuparia si lo que buscas es hacer demos o intros donde el tamano si importa jajaja

Por cierto, todos los links que habeis puesto muy wapos  (ole)  

Javi SJ Cervera

 Bien, pues gracias a vosotros y al Dependency Walker (genial programa, oye), he conseguido solucionarlo.

No tiene nada que ver con las MFC, mi programa no usa MFC ;). Era, por supuesto, un problema con la librería estándar de C con la que linkeaba.

Bien, lo que me extrañaba, es que mi proyecto estaba en modo single-threading, que supuestamente linkea a una lib estatica. Y estaba en lo cierto. Era una de las dlls que estaba usando, más concretamente HawkNL.dll, la que estaba en modo dll multiproceso, y requería por tanto esta librería. Así que recompilé la librería en modo multi-threading estático, y todo listo :D
== Jedive ==

ALRAZ

 respondiendo a la pregunta original:

http://msdn.microsoft.com/library/default....e_libraries.asp

ahí te explican los comos, por qués y cuandos de esas simpáticas DLLs (en inglés)

en resumen:
antes esas DLL se consideraban "de sistema", lo que significa que se podía asumir que el usuario las tendría instaladas en su PC
en visual studio .net, no se considera nada de ellas. La aplicación debe ser distribuida con esas DLLs






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.