¿Como desarrollar librerias para Bennu?

Started by SoSoS, August 21, 2010, 11:06:20 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Prg

Si está actualizado. Yo ya hice el ejemplo y funcionó a la perfección.
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

SoSoS


#include "bgddl.h"

#include "libgrbase.h"




static void prueba( INSTANCE *my, int *params){
    GRAPH *map;
    map = bitmap_get(params[0], params[1]);

}


DLLEXPORT DLSYSFUNCS  __bgdexport( mod_prueba, functions_exports )[] =
{

    { "PRUEBA"    , "II"   , TYPE_INT   , prueba  },
    { 0             , 0     ,  0         , 0         }
};



y me da el error en la linea donde pone map = bitmap_get(params[0], params[1]);

josebita

Además del código fuente poned siempre el error exacto, que si no a veces es dificil ayudar.

Tu código a mí me compila sin problemas (en linux) con:

gcc -c -Wall -I/usr/include/bennugd -I/usr/include/bennugd/libgrbase main.c -o main.o
gcc -omod_prueba.so main.o -shared -L/usr/lib/bennugd -lgrbase -lbgdrtm -Wl,-soname -Wl,mod_prueba.so

Si pones algún detalle más, puede que encontremos la solución.

SoSoS

||=== Prueba, Debug ===|
obj\Debug\Untitled1.o||In function `prueba':|
C:\Users\User\Documents\Prueba\Untitled1.c|19|undefined reference to `bitmap_get'|
||=== Build finished: 1 errors, 0 warnings ===|

este es el error que me sale

josebita


SplinterGU

cuidado con el prototipo, las funciones no pueden ser void.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SoSoS

incluso cambiandolo falla igual

static int prueba( INSTANCE *my, int *params){
    GRAPH *map;
    map = bitmap_get(params[0], params[1]);
    return 1;
}

SplinterGU

no, no, mi comentario es al margen del error, el error tuyo es lo que te dice josebita, compilalo como te dice el.

lo que te digo yo, es que si no es int, se va a colgar luego (vaya a saber cuando) el programa en algun lugar y no vas saber por que es.

es importante seguir las reglas de los modulos bennugd.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SoSoS

ya pero es que estoy en windows con el codeblocks y puede que falle al poner las cabeceras pero no encuentro el fallo  :-[

josebita

El error no está en la compilación de tu código que, salvo el tema del prototipo de la función, está bien.
El error está en la etapa de enlazado. Debes decirle al codeblocks que enlace contra libgrbase, además de contra la bgdrtm.

Ve a Project->Build Options->Eliges el target de compilación principal y en la pestaña donde pone "Linker Settings", cajón "Link libraries" le das a "Add" y añades la librería libgrbase.

l1nk3rn3l

y en
project build options->search directories->linker

adicionas:

c:\devbennu\bin


que es el directorio donde esta el modulo
libgrbase

lo interesante es que gcc puede compilar con dlls sin necesidad de libs(.a)
asi que buscara libgrbase.dll en el directorio bin

Drumpi

Por cierto, que yo me entere: para compilar un código primero hay que invocar a gcc ¿y luego?
Es que yo tenía un código bastante sencillo (un "adivina el número") y para compilar hice simplemente:

gcc acierta.c -o acierta

No usé el linker ni nada. Y con otro código, usando ncurses sólo añadí -llibcurses o algo similar. ¿está eso bien o sólo estoy obteniendo código objeto que no es realmente un ejecutable? porque ejecutarse se ejecuta y funciona ^^U
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Prg

Quote from: SoSoS on August 27, 2010, 08:00:32 PM
incluso cambiandolo falla igual

static int prueba( INSTANCE *my, int *params){
    GRAPH *map;
    map = bitmap_get(params[0], params[1]);
    return 1;
}

en settings/compiler and debugger setting/linker settings

agrega C:\devBennu\SDL\bin\SDL.dll
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

SoSoS

ya me funciona enlazando contra las librerias

muchas gracias  :D