Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Unir diferentes librerias estaticas en una sola

Iniciado por tamat, 19 de Septiembre de 2006, 08:04:54 PM

« anterior - próximo »

tamat

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
Por un stratos menos tenso

TheAzazel

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

senior wapo

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.

tamat

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.
Por un stratos menos tenso

TheAzazel

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

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.
Por un stratos menos tenso

ALRAZ

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.

fiero

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
www.videopanoramas.com Videopanoramas 3D player






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.