Acabo de llegar por aquí, y me preguntaba sobre las librerias de Bennu
Pues basicamente esa es mi pregunta no he conseguido encontrar como, y si me podriais decir algun sitio donde se explique como hacerse un entorno para ello.
muchas gracias
primero tienes que saber c/c++ que es el lenguaje usado por bennu internamente
segundo , bajate el bennupack seccion dlls , y hay varias dlls con codigo fuente
para aprender como funciona internamente bennu
http://bennupack.blogspot.com/
...
Los conocimientos sobre c/c++ ya los tengo y he visto el codigo de algunas librerias, lo que querria saber es como hacerme un entorno para poder compilar las librerias.
linux o win?
codeblocks con gcc
www.codeblocks.org/
visual studio express:
http://www.microsoft.com/express/
Muchas gracias ya funciona con el Code::Blocks
Una pregunta, existe algun tutorial o documentacion sobre esto, o la unica manera para aprender es ver codigo.
Salu2
Hace tiempo existían tutoriales para hacer dlls para Fenix (de hecho, creo que en mi web aun sobrevive uno). Para Bennu creo que es más sencillo.
A partir de ahí, todo es cuestión de saber C/C++ y, opcionalmente, librerías adicionales (openGL, SDL...), no hay nada específico sobre Bennu.
Pero si necesitas algo en concreto sólo hay para mirar código (los propios módulos de Bennu vienen bien claritos).
Para hacerlos, puedes usar, en teoría, cualquier IDE de programación existente. Algún día tengo que volver a darle caña al Dev-c++
nunca he hecho alguna y tengo muchas ganas de hacer varias, pero conozco un link de cómo "crear entorno de desarrollo de dlls para bennu":
http://forum.bennugd.org/index.php?topic=107.0
sería bueno que alguien hiciera un tutorial sencillito y concreto con un ejemplo de librería sencillo :)
Haciendo unas pruebas me ha salido un fallo,
undefined reference to `bitmap_get'
Cuando llamaba a la funcion bitmap_get, he incluido libgrbase.h
Alguien sabe que puede deberse
En mi manual hay un apartado que es justamente eso, un tutorial sencillito con una libreria de ejemplo
Quote from: SoSoS on August 22, 2010, 10:09:14 PM
Haciendo unas pruebas me ha salido un fallo,
undefined reference to `bitmap_get'
Cuando llamaba a la funcion bitmap_get, he incluido libgrbase.h
Alguien sabe que puede deberse
Recuerda que el orden de declaración de librerías funciones y variables es muy importante en C, es una de las "malas costumbres" que uno coge al desarrollar en DIV/Fenix/Bennu (bueno, en Bennu menos ^^U).
También que el resto de mensajes de error también son importantes, y que los errores anteriores suelen causar los siguientes que se notifican.
Quote from: osk on August 22, 2010, 10:38:17 PM
En mi manual hay un apartado que es justamente eso, un tutorial sencillito con una libreria de ejemplo
Pero ¿está actualizado? ^^U
bitmap_get está definido en g_bitmap.h que es incluído por libgrbase.h.
Asegúrate de que tienes los PATHs de include bien definidos (es decir, que el compilador puede encontrar el fichero g_bitmap.h) porque puede que el error venga de ahí.
Si no es así, por favor pon el código que quieres compilar porque generalmente así podemos ayudar mejor.
Quote from: Drumpi on August 23, 2010, 12:28:35 AM
Quote from: osk on August 22, 2010, 10:38:17 PM
En mi manual hay un apartado que es justamente eso, un tutorial sencillito con una libreria de ejemplo
Pero ¿está actualizado? ^^U
Bueno...es del verano pasado. No creo que en un año haya cambiado tanto las cosas...y menos lo básico.
Tengo pendiente actualizarlo (tengo bastante material nuevo) pero por ahora todo lo que hay está correcto,creo
Quote from: osk on August 23, 2010, 02:11:41 PM
Quote from: Drumpi on August 23, 2010, 12:28:35 AM
Quote from: osk on August 22, 2010, 10:38:17 PM
En mi manual hay un apartado que es justamente eso, un tutorial sencillito con una libreria de ejemplo
Pero ¿está actualizado? ^^U
Bueno...es del verano pasado. No creo que en un año haya cambiado tanto las cosas...y menos lo básico.
Tengo pendiente actualizarlo (tengo bastante material nuevo) pero por ahora todo lo que hay está correcto,creo
No, es por eso, si es del verano pasado entoces sí está actualizado. Es que no recordaba cuando fue la revisión del manual, y creo que Splinter incluyó cambios hace como año y medio al motor de las dlls, para que también aceptase librerías de uso normal, y cambió algo.
Tengo un par de librerías en la pila de proyectos, a ver si me puedo poner en un par de meses a ello.
Si está actualizado. Yo ya hice el ejemplo y funcionó a la perfección.
#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]);
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.
||=== 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
No estás enlazando contra libgrbase.
cuidado con el prototipo, las funciones no pueden ser void.
incluso cambiandolo falla igual
static int prueba( INSTANCE *my, int *params){
GRAPH *map;
map = bitmap_get(params[0], params[1]);
return 1;
}
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.
ya pero es que estoy en windows con el codeblocks y puede que falle al poner las cabeceras pero no encuentro el fallo :-[
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.
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
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
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 settingsagrega
C:\devBennu\SDL\bin\SDL.dll
ya me funciona enlazando contra las librerias
muchas gracias :D