Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





añadir DLLs a mi libreria

Iniciado por burb, 12 de Noviembre de 2006, 03:20:04 PM

« anterior - próximo »

burb

hola, quiero meter en mi libreria el codigo usado de un archivo DLL (de otra libreria) para no tener que depender de ese archivo. ¿como puedo hacerlo desde Visual C++?

¿y legamente se puede hacer?, pertenece a una libreria Open Source.

senior wapo

Si que se puede, pero requiere trucos raros.

Mete la DLL como un bloque de bytes en tu programa y usa este codigo para cargarla (robusto, usado por ejemplo, por py2exe):

http://www.joachim-bauch.de/tutorials/load_dll_memory.html/en

Si en cambio, tienes el codigo fuente de la DLL compilalo como estático y linka normal.

Si la libreria es GPL mala suerte, no puedes legalmente a menos que ofrezcas el codigo fuente de tu programa.

Yo lo que quiero hacer con OpenAL (LGPL) es compilar estáticamente y acceder a todas las funciones mediante punteros a funciones. Al arrancar el programa buscar la DLL, de existir, y cargarla normalmente redirigiendo los punteros a las funciones de la DLL en lugar de la estática.

De esa manera cumplo la LGPL a pesar de linkar estáticamente porque el usuario puede reemplazar la DLL y si no lo hace se usa la copia interna, sin presentar dependencias.

Un saludo.


EDIT: Alternativamente compra una licencia de molebox para que te haga el primer proceso automaticamente (incrustar la DLL y cargarla) pero eso no te resuelve le problema de las licencias GPL y LGPL.

burb

gracias por la respuesta, aunque tengo algunas dudas

¿El hecho de usar una simple funcion GPL en un programa implica el tener que liberar el resto del codigo?

¿Hay diferencia a efectos legales entre hacer una libreria usando partes GPL o hacer una aplicacion?.

senior wapo

Citar¿El hecho de usar una simple funcion GPL en un programa implica el tener que liberar el resto del codigo?

Si. Por eso se creó la LGPL.


Citar¿Hay diferencia a efectos legales entre hacer una libreria usando partes GPL o hacer una aplicacion?.

Ninguna, no se hace distinción. Código es código tenga la forma que tenga. Si metes código GPL o llamas a funciones GPL, tienes que liberar el código. Por eso se la denomina licencia viral: todo lo que toca, lo "contamina".

Si metes código LGPL tienes que proporcionarle al usuario una manera de cambiarlo y reconstruir la aplicación con los cambios.
Forma típica: tener el código LGPL en una DLL separada que el usuario pueda recompilar aparte sin tocar tu aplicación o librería.
Algunas librerias supuestamente LGPL añaden una cláusula que permite enlazar estáticamente si no has modificado el código cubierto bajo LGPL.

Si además has cambiado algo en el código original, debes, en ambos casos, publicar el código fuente de tus cambios para que otros puedan usarlos.






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.