Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: tamat en 19 de Septiembre de 2006, 08:04:54 PM

Título: Unir diferentes librerias estaticas en una sola
Publicado por: tamat en 19 de Septiembre de 2006, 08:04:54 PM
Estoy desarrollando un framework pero uso muchas librerias estáticas de terceros (como SDL, DevIL, Glew, PThreads, etc) y es un palo para los desarrolladores tener que poner la lista de librerias a la hora de linkar.

Existe alguna manera de coger varias librerias y mezclarlas en una sola? (tecnicamente no debería haber problema salvo que hubiesen colisiones entre ellas, no?)

Gracias
Título: Unir diferentes librerias estaticas en una sola
Publicado por: TheAzazel en 19 de Septiembre de 2006, 08:19:39 PM
Si que puedes y sin ningun problema.

Necesitaras las versiones estaticas de todas ellas y creas una dll. CRM32Pro lo hace asi :)

Otra cosa es el tema de licencias que normalmente si linkas en estatico tendrias que dar el codigo fuente.

Saludos
Título: Unir diferentes librerias estaticas en una sola
Publicado por: senior wapo en 19 de Septiembre de 2006, 08:46:38 PM
Como te dice TheAzazel ojo con las licencias de cada una. Si enlazas estáticamente una librería GPL/LGPL todo el programa ha de cumplir con sus requerimientos (publicar fuentes/proporcionar los ficheros objeto).

Es posible combinar varias librerias estáticas siempre que no haya colisiones de nombres de símbolos (funciones, variables, etc...).

Así a bote pronto se me ocurre compilarlas y mover todos los ficheros  objeto de cada una a una misma carpeta y linkarlas en una libreria.

En gcc:

ar c libsuperlib.a *.o
ranlib libsuperlib.a


En VC++ (puede que falle algo, no lo uso mucho):

link /LIB /OUT:superlib.lib *.obj


Yo es que soy muy de línea de comandos, pero podrás con el IDE igual.
Título: Unir diferentes librerias estaticas en una sola
Publicado por: tamat en 19 de Septiembre de 2006, 10:35:56 PM
por lo que veo necesito recompilarlas todas, no? mi idea era hacerlo directamente sobre las librerias ya que no me veo capaz de recompilar SDL y DevIL, seguro que necesitaré muchas otras librerias y al final sería un caos.
Título: Unir diferentes librerias estaticas en una sola
Publicado por: TheAzazel en 20 de Septiembre de 2006, 12:33:51 PM
tendrias que recompilarlas todas si no te dan ya la lib estatica...creo que SDL te tocaria recompilarla en modo estatico y la otra, no lo se.

Sobre SDL, si vas a usar Visual Studio te puedo pasar la version estatica de SDL,SDL_net,SDL_smpeg y SDL_mixer...

tu diras
Título: Unir diferentes librerias estaticas en una sola
Publicado por: tamat en 22 de Septiembre de 2006, 12:04:33 AM
no, si ya las tengo estaticas, yo quiero juntarlas todas en una por evitar que el que cree un proyecto tenga que poner en la lista de librerias con las que linkar todas las que uso, que son casi unas 10.
Título: Unir diferentes librerias estaticas en una sola
Publicado por: ALRAZ en 23 de Septiembre de 2006, 07:41:18 PM
Cita de: "tamat"no, si ya las tengo estaticas, yo quiero juntarlas todas en una por evitar que el que cree un proyecto tenga que poner en la lista de librerias con las que linkar todas las que uso, que son casi unas 10.

Bueno, si eso es todo lo que necesitas, tal vez no te pese tanto tener que entregar los fuentes de lo siguiente que te voy a explicar:

Primero, tendrás que usar Visual C++, porque me he dado cuenta que la versión precompilada de DevIL da mucho problemas con MinGW. Si vas a usar DevIL con MinGW tendrás que recompilar esa librería

y segundo, siga usted las instrucciones que aparecen en pantalla:
-Crea un proyecto DLL
-Agrega un Main.cpp al proyecto, o ponle el nombre que más te guste
-en el código de Main.cpp, agrega todos los includes de cada una de las librerías. Ejemplo:
#include <sdl.h>
#include <sdl_image.h>
#include <il/il.h>
#include <il/ilu.h>
//etc...
-Busca en las propiedades del proyecto algo donde agregar los nombres de los .lib de cada una de las librerías y obviamente, agrega ahí sus nombres
-Compila!
-Obtendrás una DLL de salida, además de un .lib (o un .a si estás usando MinGW).
-Crea un archivo .h con los includes arriba mencionados

Ahora sólo tienes que decirle al programador que incluya tu .h y linkee al .lib que te ha generado el compilador
y liiiiistooooo

El problema es que ahora tendrás otra DLL que incluir en el directorio donde se encuentran los archivos compilados con tu librería.


Bueno, por ay va la cosa.
Título: Unir diferentes librerias estaticas en una sola
Publicado por: fiero en 23 de Septiembre de 2006, 08:16:10 PM
Yo uso VC6, tengo un proyecto "Static link Library" que me crea una .LIB y puedo añadir al proyecto todas las .LIB que quiera. El fichero .LIB final contiene todos los otros LIB más el código compilado de mi proyecto.

un saludo