Ver la versión completa : Portando SDL a la Dingoo A320
Buenas, estoy intentando portar las SDL a la dingoo, pero no hay manera, para empezar queria compilar las librerias SDL en windows ya que el sdk de la dingoo tiene la libreria compilada para windows y asi podria ir haciendo pruebas...
Me he bajado el codigo de las sdl y he preparado todo para que se usaran las funciones del sdk de la dingoo, despues de pelearme entre si unos ficheros se compilan en c++ otros en c (porque el sdk de la dingoo es en c++)... he conseguido compilar todo, el problema viene al linkar, que salen como 50 referencias no encontradas desde dentro del propio codigo de las sdl, de unos trozos a otros.
Alguien que haya intentado compilar las sdl con codigo c/c++ a la vez?
Estoy intentando compilarlo todo con devcpp.
Para mezclar librerías C y C++ lo mejor es pasar todo a C++ renombrando los ficheros .c a .cpp. Esto es porque los ficheros objeto no son compatibles. El compilador c++ añade símbolos especiales a las funciones. Sino, tendrías que añadir directivas ifdef __cplusplus por todo el código C.
Aún así, yo no trataría de pasar todo el código de SDL a la dingoo (no es sólo recompilar), sino crear un pequeña libreria que permita dibujar en pantalla usando la memoria de vídeo y el hardware.
El problema es que en c++ no acababa de compilar bien todas las SDL, si quiero compilar las SDL es para poder portar luego otros programas en SDL tambien, pero gracias por decirme lo de los ficheros objeto, eso explica muchas cosas xD
< - >
Creo que ya se que intentare. Creare un wrapper para las librerias de la dingoo que no necesite ser usado como c++ (contiene clases y demas) y despues usare esa libreria desde las sdl compiladas con C, a ver si asi...
Me encantaría ayudar con lo del port de SDL, creo que sería una de las mejores cosas que le podrían pasar a la Dingoo.
Ñuño Martínez
17/04/2009, 14:53
C y C++ son dos lenguajes diferentes.
Para que el código C funcione con C++ hay que declarar los objetos (en el sentido clásico, esto es, variables y funciones) como "externas en lenguaje C". Normalmente los modernos archivos de cabecera ya lo hacen, pero si no es este el caso (cosa que dudo, porque SDL no es nada viejo) puedes hacerlo así:
extern "C" {
#include <sdl/sdl.h>
}
Si con eso no funciona, es que algo estás haciendo mal. Y cambiar la extensión del archivo de ".c" a ".cpp" o ".cc" no es una solución, sino una chapuza.
El opuesto (que código C++ pueda utilizarse en C) es bastante más complicado, pero no imposible. Para ello basta con conocer el "mangled name" del objeto (de nuevo en el sentido clásico), esto es, el nombre que el compilador da a cada objeto, en el caso de llamadas a función añadir el puntero al objeto (esta vez en el sentido de C++) como primer parámetro y hacer la declaración en el archivo de cabecera, tal vez con ayuda del preprocesador.
Cada compilador utiliza un generador de mangled name diferente, pero suele ser común que sea "_clasemetodoparametrosretorno", donde "parametros" y "retorno" son las iniciales del tipo de cada parámetro o del retorno (por ejemplo, "v" para void, "i" para integer "l" para long int, etc.).
De todas formas, aunque el SDK sea en C++, dudo que la base esté escrita en dicho lenguaje, será como mucho una envolvente. Si me equivoco, sería el primer caso con el que me encuentro.
Aquí (http://blog.eikke.com/index.php/ikke/2005/11/03/using_c_classes_in_c) hay un ejemplo bastante bueno de cómo usar clases de C++ en C.
Por ahora lo mejor creo que es intentar aprender a usar las funciones que hay en la libreria entry.a que si estan en C, la gracia era que el sdk permitia desarrollar en windows y luego hacer el build para la dingoo.
No creo que te equivoques.
Ñuño Martínez
18/04/2009, 21:41
No creo que te equivoques. :rever: TREMENDO APORTE TE PASASTE.
¿Por casualidad no tendrás el código de lo que hayas hecho (aunque no enlace) para poderle echar un vistazo? ¿Lo tienes en algún repositorio?
¿Por casualidad no tendrás el código de lo que hayas hecho (aunque no enlace) para poderle echar un vistazo? ¿Lo tienes en algún repositorio?
No lo tengo en ningun repositorio pero por el momento lo poco que habia hecho era crear una "entrada" para la dingoo en las sdl, luego intentar probar las mezclas C/C++ pero nada util por ahora, aunque si tienes alguna duda o puedo ayudar, pos aqui estamos.
Danielo515
29/04/2009, 20:05
Dios, que esto funcione, porfi porfi porf, dingo con sdl.... wow!!!
Tengo que probar con linux, porque con Visual C++ (que nunca he usado) ni si quiera soy capaz de que use mi SDL_config_s2d.h :(
Podrías empaquetar lo que tienes, aunque sea poco, ¿y hacerlo disponible?
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions Inc. All rights reserved.