Problemilla para usar un módulo C compilado propio en código Bennu.

Started by osk, June 22, 2009, 12:06:05 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

osk

Hola.
Estoy intentando compilar algún modulillo hecho en C para ver si me sale la cosa y poder hacer alguna librería "cool" para Bennu,pero no puedo ni arrancar.

He cogido el código fuente del módulo de ejemplo que Splinter acaba de actualizar en el post correspondiente de la sección de Desarrollo, y lo he compilado -creando un proyecto "Shared library"- con el CodeBlocks en Windows (habiéndole dicho antes al Mingw dónde tiene que ir a buscar los .h y al linker dónde tiene que ir a buscar las dll, claro). No me ha dado ningún error: me genera la Dll sin problemas.

Pero entonces, cuando intento compilar un código Bennu cualquiera (que está en la misma carpeta que el módulo dll recién creado), me dice que: "undefined procedure" a cualquier función de las que se definen en el módulo ese. Evidentemente, he hecho el import, y por si acaso, he metido la carpeta de trabajo en el Path, no sea que se lie con eso. Pero nada.
Estoy seguro que me estoy saltando algún paso, pero no sé qué es.

Graaaaciaaaas!!!

SplinterGU

el nombre que aparece en los define __bgdexport (mod_cd en este ejemplo) es el modulo de la dll, la dll debe llamarse exactamente asi, sino, no funciona.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

josebita

Es una prueba tonta, pero para ver qué estás exportando, la moddesc viene muy bien.

osk

Sí!!! He hecho lo que has dicho, Splinter, y funciona!!!
Graciaaasss!!!
Ahora viene el trabajillo duro.

Por cierto, Josebita, moddesc sólo me enseña información si la librería la coloco en la misma carpeta que las demás. Si está en otra carpeta diferente, no me da ningún error pero no me saca nada. Ummm...

osk

Bueno chicos, ya vuelvo a ser yo, el pesado de turno.
Viendo que la cosa más o menos ya me marcha en Windows, he querido hacer lo mismo en Linux, que es lo que me interesa, al fin y al cabo.
Mi objetivo es conseguir que todas las librerías que vienen en el BennuPack sólo para Windows también estén compiladas para Linux, y luego comenzar yo a hacer alguna.
Bueno, pues he empezado con la librería "water", que es sencillita. Me bajo el Codeblocks y primera sorpresa, sin decirle ninguna ruta de ninguna librería ni nada...me compila sin errores...RARO RARO RARO, aún teniendo en cuenta que me olvidé de instalar las fuentes de Bennu, así que no sé cómo encontró las cabeceras y todo lo demás...Supongo que allí estará el fallo. El caso es que me crea un .so bien majo.
Un poco mosca, he continuado. He querido compilar el código Bennu de ejemplo que hace uso de esta librería y me he ido encontrando con diversos problemas:
-Primero no encontraba la librería .so, aun estando en la misma carpeta. Me he acordado de modificar LD_LIBRARY_PATH. Ok.
-Luego no encontraba el resto de módulos que necesita (mod_video, mod_key), los cuales están en /usr/lib/bgd/module . He intentado modificar LD_LIBRARY_PATH per esta vez nada. También he intentado modificar PATH pero tampoco. Al final he optado por copiar todos los módulos a la misma carpeta donde está mi código Prg. Y esta vez sí ha funcionado...pero, ¿no habría otra forma más correcta?
-Y finalmente, el error matador:  Undefined procedure ("WATER_START") . Donde no sé yo ya qué hacer.

Gracias de antemano.

P.D: Lo he hecho todo en una Ubuntu 8.10


josebita

No quisiera spamear, pero en mi PPA tengo paquetes de Bennu para desarrollo, con cabeceras y todo lo necesario para Ubuntu 8.10 y 9.04 para sistemas x86.
Creo que facilitan mucho las cosas para crear librerías...

Con las librerías, en Linux, el path no tiene nada que ver y la variable LD_LIBRARY_PATH no deberías tener que tocarla (el instalador se encarga de configurar el sistema para que busque librerísa en el sitio adecuado).
Además, mira a ver si en /usr/lib/bgd/module hay un enlace para cada módulo que se llame igual que el módulo, pero con "lib" por delante:

libmod_map.so -> mod_map.so
libmod_key.so -> mod_key.so
etc.

Si no los hay, crealos y ejecuta como root "ldconfig".

Por cierto que es muy buena idea lo del bennupack para linux, ¡ánimo!.

SplinterGU

aca tenes la water desde hace tiempo

http://betatester.bennugd.org/snapshot/

josebita, si, las libs standard el instalador se encarga, pero la nueva water no... tiene que setear LD_LIBRARY_PATH o agregar al ldconfig.

Lo que creo deben faltar son las dependencias de libvideo, etc. Por ejemplo, posiblemente falte SDL.

Osk, leete esto, creo que viene por aqui el tema... http://forum.bennugd.org/index.php?topic=640.msg8674#msg8674
puede que algun paquete difiera en la distro, pero basicamente son esos.

hace un ldd de las libs, y vas a ver que falta en cada una.

por ejemplo:

ldd /usr/lib/bgd/module/mod_video.so

modificare el instalador para que chequee cada una de las dependencias y advierta ante falta de alguna dependencia.

Saludos.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2