Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Librerias Estaticas (.lib)

Iniciado por tamat, 31 de Julio de 2003, 03:14:45 PM

« anterior - próximo »

tamat

 Tengo varios proyectos que usan los mismos archivos y me gustaria no tener que recompilar los mismos archivos desde cada proyecto así que busco informacion sobre como generar un .lib que contenga todos los simbolos para que desde los demas proyectos solo tenga que incluir el .hxx y decirle que use el .lib

He visto que al compilar mi aplicacion me salen muchos .obj y un .lib pero este .lib no ocupa nada (2ks) y dudo que sea lo que busco, alguien tiene info del tema?

Gracias
Por un stratos menos tenso

tamat

 Me lo acaban de chivar por efnet, hay que crear un proyecto en el visual como libreria estatica y ya te genera el lib adecuado.
Por un stratos menos tenso

fiero

 Yo tengo un proyecto de libreria estática (.LIB) con todas mis funciones y me mete todo dentro. ¿Estas seguro de que has incluido todos los .cpp y .h en el proyecto?

PD: Vale, te has respondido mientras tenia la ventana abierta XD
www.videopanoramas.com Videopanoramas 3D player

tamat

 arg, ahora al intentar linkar contra esa libreria me salen cientos de errores de redefinicion de simbolos, creo que es por culpa de STLport, joer, por cada cosa que arreglo rompo dos :_(
Alguien sabe a que puede deberse?

os dejo unos ejemplos:

Compiling...
main.cpp
Linking...
  Creating library Debug/console.lib and object Debug/console.exp
MEMOlib.lib(Flag.obj) : error LNK2001: unresolved external symbol __chkesp
MEMOlib.lib(MEMOtype.obj) : error LNK2001: unresolved external symbol __chkesp
main.obj : error LNK2001: unresolved external symbol __chkesp
MEMOlib.lib(maze.obj) : error LNK2001: unresolved external symbol __chkesp
MEMOlib.lib(utils.obj) : error LNK2001: unresolved external symbol __chkesp
MEMOlib.lib(song.obj) : error LNK2001: unresolved external symbol __chkesp
MEMOlib.lib(MEMOtype.obj) : error LNK2001: unresolved external symbol _atexit
main.obj : error LNK2001: unresolved external symbol _atexit


Edit: Parece que ya va, era problema de colision con otras librerias, gracias.
Por un stratos menos tenso

tamat

 Ahora tengo un problema que no preveia, resulta que si modifico el proyecto que cambia el lib los demas deberian "caducar" pero obviamente el compilador no lo detecta así que tengo que ir manualmente uno por uno cambiandolos, alguien sabe alguna solucion para que el visual recompile otros proyectos (del mismo workspace) al compilar uno dado?

Edit:

Joer, si es que lo tiene todo el VC++, ha sido ir a project y ver Dependencies, y pam, puedo elegir de quien depende, sin duda el VC++ como app es de lo mejor de MS.
Por un stratos menos tenso

MChiz

 Hola tamat!

Lo que debes hacer es crear una dependencia entre proyectos.

Por ejemplo, si tienes:

- Libreria matematica
- Renderer
- Aplication

Aplicacion depende de renderer y renderer de la libreria matematica.
Si haces un cambio en un componente, se recompilaran todas sus dependencias habia abajo ( es decir, "todos sus hijos" ).

A ver si es esto lo que querias!

tamat

 Sips, parece que funciona solo que ahora tengo algun tipo de problema con una funcion que exportaba (precisamente aquella de la que hablamos para compartir misma memoria...), explicaré el error por si alguien sabe por donde van los tiros:

Tengo una clase, esta clase incluye a mylib.hxx para que al compilar se empaquete la clase dentro de una DLL (ademas te crea la funcion para captar la instancia), hasta aqui todo muy bonito, solo que desde que linko contra la libreria estatica una de las funciones que tenía declaradas en un header y que era externa para pillarla desde fuera ya no me la pilla con el GetProcAddress, cuando la pido retorna null, y antes cuando compilaba todo el proyecto si que funcionaba.

Seguiré investigando a ver a que puede deberse, deduzco que si linkas contra una libreria que tiene un objeto exportado dicho objeto no lo exportas tú a no ser que en tu declaracion pongas explicitamente que exportas ese simbolo externo.
Por un stratos menos tenso

MChiz

 uf, que raro. No se porque puede ser... yo lo tengo asi y me va bien : (

Siento no saber ayudarte : (

ethernet

 O no he etendido muy bien o estas intentado pillar con getprocaddr la direccion de una funcion que linkas estaticamente (no tendria sentido no necesitas hacer nada de eso). Creo q no he entendido ese cambio de dinamico a estatico.


saludos

tamat

 más dudas sobre librerias estaticas, resulta que una de mis funciones hace uso de una libreria estatica externa sin embargo el proyecto de visual no me deja decir contra quien quiero que linke mi libreria externa por lo que deduzco que le es indiferente ya que una libreria estatica unicamente incluye los simbolos compilados. Mi pregunta es si existe alguna manera de obligar a mi libreria a incluir tambien los elementos externos para que sea más compacta, alguna sugerencía?

No quiero tener que estar linkando contra 10 archivos cada vez.
Por un stratos menos tenso






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.