Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Versión Estático De Un Juego En Linux

Iniciado por javiel, 13 de Octubre de 2005, 09:39:15 AM

« anterior - próximo »

javiel

 Bueno, a ver si me explico bien. Estoy haciendo un juego en SDL, y en la versión de linux me gustaría hacer un compilación en la que no hiciese falta tener las librerías SDL instaladas en la distribución, sino que directamente  estuviesen con el juego. Como en windows cuando se dejan las DLL junto al ejecutable.

La verdad que no tengo ni idea de como hacerlo. ¿alguna idea para esto?

muchas gracias a todos
uper-Tirititran: el superhéroe gaditano (http://www.super-tirititran.com)

TheAzazel

 Si he entendido bien lo que quieres... tienes que compilar SDL (cuando hagas un configure tienes que especificar que quieres la lib estaticas, creo que por defecto las produce.. pero no recuerdo ahora mismo) y linkas contra la lib estatica.
Yo tengo por ahi la SDL 1.2.9 para Linux compilada con el GNU GCC 3.2, si no sabes como hacerlo tu mismo... dimelo y te la envio por mail.

Y lo que no se es si habra algun programa para decirle a tu ejecutable que la lib dinamica esta en el propio directorio... supongo que si, pero no lo se. Porque si no recuerdo mal...cuando linkas contra la dinamica, tu exe guarda la ruta... y si no la encuentra alli, aunque la tenga en el mismo directorio dira que no la encuentra... quizas alguien de linux nos puede aclarar mejor esto...

Saludos

javiel

 Gracias

No entiendo bien lo que me quieres enviar por correo. Yo tengo las libsdl instaladas desde apt, así q no las compilé yo.

Yo he visto dos formas de hacerlo. En el juego Wormux lo hacen:

- Una es con las librerías junto al ejecutable
- Otra es como si tuviesen las librerías dentro del ejecutable

La verdad que no se como  se hace. Si es verdad que linux guarda la ruta de la librería en el mismo ejecutable, como dices, solo tendría que linkarla al hacer el make. Por lo tanto se supone que caso resulto. La cosa es que al linkar puede poner rutas relativas, que supongo que si

¿alguien que sepa sobre este tema?

muchas gracias
uper-Tirititran: el superhéroe gaditano (http://www.super-tirititran.com)

senior wapo

 Linux no guarda la ruta dentro del ejecutable. Hay unas rutas predeterminadas para las librerias, y además han de estar registradas (algo así como pasa con los ActiveX en windows). Se registran con el comando de sistema ldconfig, y han de estar copiadas a uno de los directorios asignados para librerias (la lista entá en /etc/ld.conf si no recuerdo mal). También puedes hacer trucos feos con la variable de entorno LD_PRELOAD_PATH (o algo asi era) arrancando desde una script pero no te lo recomiendo.

Ah, la ruta de busqueda no incluye el directorio donde está el ejecutable (a diferencia de windows) por cuestiones de seguridad.

Mi recomendación es que linkes estáticamente, pero si usas una librería dinámica siempre puedes cargarla por código en tu programa. Mirate la ayuda de dlopen (similar al LoadLibrary de windows).

Lo dicho, mirate las opciones del configure de la libreria al compilarla (./configure --help) para ver como activas que compile estáticamente, normalmente con ./configure --disable-shared

No compilo mucho en Linux ultimamente, esto te lo cuento de memoria, asi que asegurate bien.

TheAzazel

 
CitarLinux no guarda la ruta dentro del ejecutable. Hay unas rutas predeterminadas para las librerias, y además han de estar registradas (algo así como pasa con los ActiveX en windows). Se registran con el comando de sistema ldconfig, y han de estar copiadas a uno de los directorios asignados para librerias (la lista entá en /etc/ld.conf si no recuerdo mal). También puedes hacer trucos feos con la variable de entorno LD_PRELOAD_PATH (o algo asi era) arrancando desde una script pero no te lo recomiendo.

Uhm... pues explicame porque yo con solo copiar a un directorio (normalmente a /usr/mylib) el header y la .so y despues linkar contra el... mi ejecutable GUARDA en su interior el path completo a dicha .so. No he registrado nada y todo funciona bien si la lib esta en ese path.
Que puede que este haciendolo a "la me cago en diez" es posible jeje, pero que funciona, tambien es verdad y con 0 engorros.

Ahora bien, me gustaria saber si existe algun programa para cambiar la ruta esa dentro del exe, voy a hacer una prueba "manual" cambiandolo con un editorHEX a ver que sucede (me da que funcionara).


CitarNo entiendo bien lo que me quieres enviar por correo. Yo tengo las libsdl instaladas desde apt, así q no las compilé yo.

Me refiero a que la distribucion de las SDL no incluye las lib estaticas, solo las dinamicas (y una lib estatica pero de importacion) y para obtener las estaticas..debes bajarte el codigo fuente de SDL, ejecutar el configure y luego el make. Lo que yo te puedo enviar por email es la lib SDL 1.2.9 estatica compilada en Linux con el GNU GCC 3.2, o si quieres, puedes intentar obtenerla tu, no es dificil pero debes configurarlo para que te incluya el driver X11,DGA,fbcon, sonido y lo que quieras...


A ver si alguien nos arroja luz sobre eso del path dentro del exe... que yo os juro que lo tengo asi y aun no estoy loco  (uoh)

...

bueno vale, un poco jajaja

janio

 Lo normal es no incluir la ruta a la lib en el ejecutable, sino que se busque en las rutas configuradas.

Si lo que quieres es meter la lib de SDL en el propio directorio del juego, normalmente se lanza con un script que añade la ruta donde esta la lib a la variable de entorno LD_LIBRARY_PATH y luego ejecuta el binario del juego. Un ejemplo de juego que hace esto y usa SDL es el UT2004.

Respecto a enlazar estáticamente incluyendo SDL dentro del ejecutable, es recomendable tener en cuenta que la licencia es LGPL.


To comply with this license, you must give prominent notice that you use the Simple DirectMedia Layer library, and that it is included under the terms of the LGPL license. You must include a copy of the LGPL license.
You must also do one of the following:
Include the source code for the version of SDL that you link with, as well as the full source or object code to your application so that the user can relink your application,
or
Include a written offer, valid for at least three years, to provide the materials listed in option 1, charging no more than the cost of providing this distribution,
or
Make the materials listed in option 1 available from the same place that your application is available.

The most common way to comply with the license is to dynamically link with SDL, and then include the SDL source code and appropriate notices with your application.

Embedded Use:
Personally, I don't have a problem with anybody statically linking SDL for use with embedded environments that don't already have an open development environment. (i.e. the users can't relink programs anyway) However, this does technically violate the LGPL, so be cautioned.
[/quote]

javiel

 Gracias a todos, pero tengo varias dudas

De princio he encontrado esto:

http://www.geocities.com/chuidiang/herrami.../librerias.html

que explica bastante bien lo de las librerías dinámicas y estáticas y que programas utilizar para hacerlo. Mi primera idea era como dice janio y senior wapo actualizar LD_LIBRARY_PATH lanzando luego desde el programa desde un script. Me parece lo mas sencillo por ahora. Pero

senior wapo ¿porque no me lo recomiendas?

La otra opción es hacer la versión estática que según explica janio (mi inglés es muy chungo), tengo que poner explicitamente que uso SDL, poner una copia de la licencia LGPL y poner el código completo de SDL. ¿no?

Bueno, de principio supongo que prefiero lo del script, ya que es más sencillo, pero me gustaría saber que problemas puedo tener con esto

También me gustaría que TheAzazel me enviase la compilacion de SDL estática a javi.pacheco _AT_ terra.es. De todas formas voy a intentar hacer yo la compilacion estática ya que necesito también SDL_image, SDL_mixer, SDL_ttf y expat

Muchas gracias a todos
uper-Tirititran: el superhéroe gaditano (http://www.super-tirititran.com)

janio

Cita de: "javiel"La otra opción es hacer la versión estática que según explica janio (mi inglés es muy chungo), tengo que poner explicitamente que uso SDL, poner una copia de la licencia LGPL y poner el código completo de SDL. ¿no?

Segun la licencia, deberias ademas de dar el codigo fuente de SDL, permitir que el usuario vuelva a enlazar el programa con una version nueva de SDL, o bien cargando la lib dinamicamente, o dando los .o (o el codigo fuente) de tu programa si se enlaza estaticamente. En los dos casos hay que indicar que usa SDL y que el codigo de SDL esta disponible bajo licencia LGPL.

Para distribuir el codigo de SDL y la parte de tu programa con la que enlazar te dan las opciones de incluirlo con el programa, hacer una oferta de al menos 3 años en la que enviaras el codigo de SDL a quien lo pida con un precio maximo de los costes, o que esten disponibles en el mismo sitio donde se obtiene el programa






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.