- Código: Seleccionar todo
- archivos.c: En la función ‘cargar_participantes’:
 archivos.c:36: aviso: variable ‘f2’ sin usar
 archivos.c:36: aviso: variable ‘f1’ sin usar
 archivos.o: In function `cargar_participantes':
 /home/jesus/programa seleccion competidores/archivos.c:34: multiple definition of `lista_participantes'
 main.o:/home/jesus/programa seleccion competidores/main.c:41: first defined here
 collect2: ld devolvió el estado de salida 1
 make: *** [Random_selection_competitors] Error 1
Voy a poneros en varios code cada uno de los archivos por si asi podeis ayudarme a encontrar el problema con más facilidad. Por si alguien lo va a preguntar, no es un juego, es un programa que estoi haciendo que carga una lista de nombre y una ruta a una imagen de un archivo en formato csv para despues de forma aleatoria seleccionarlos de dos en dos (como en las competiciones de la tele donde seleccionan al promero de forma aleatoria y al segundo igual).
archivos.c
- Código: Seleccionar todo
- /*
 Random selection of competitors Copyright (C) 2009 Jesús Hernández Gormaz
 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License as
 published by the Free Software Foundation; either version 3, or
 (at your option) any later version.
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- Código: Seleccionar todo
- Este programa es software libre. Puede redistribuirlo y/o
 modificarlo bajo los términos de la Licencia Pública General
 de GNU según es publicada por la Free Software Foundation,
 bien de la versión 3 de dicha Licencia o bien (según su
 elección) de cualquier versión posterior.
 Este programa se distribuye con la esperanza de que sea
 útil, pero SIN NINGUNA GARANTÍA, incluso sin la garantía
 MERCANTIL implícita o sin garantizar la CONVENIENCIA PARA UN
 PROPÓSITO PARTICULAR. Para más detalles, véase la Licencia
 Pública General de GNU.
 Debería haber recibido una copia de la Licencia Pública
 General junto con este programa. En caso contrario, escriba
 a la Free Software Foundation, Inc., en 675 Mass Ave,
 Cambridge, MA 02139, EEUU.
 */
- Código: Seleccionar todo
- #include "archivos.h"
 int cargar_participantes(char *ruta_archivo){
 enum estado {espera, leyendo_participante, leyendo_rutaimagen} estado=espera;
 register int r=0, f1=0, f2=0;
 char cl[101];
 participante *participantes, *p_temporal;
 if(ruta_archivo != NULL){
 FILE *archivo;
 archivo= fopen(ruta_archivo, "r");
 if(archivo != NULL){
 while(fscanf(archivo, "%s", &cl[0]) != EOF){
 /*comprobando el estado de la carga*/
 switch(estado){
- Código: Seleccionar todo
- /*si el estado es de leyendo participante, se concatena la cadena leida del archivo
 en el nombre del participante dejando un espacio, mientras la cadena leida sea diferente de ';'*/
 case leyendo_participante: if(cl[0] == ';'){
 estado= leyendo_rutaimagen;
 }else{
 strcat(&(p_temporal->nombre[0]), " \0");
 strcat(&(p_temporal->nombre[0]), &cl[0]);
 }
 break;
 /*copiando el nombre de archivo leido a la ruta del nuevo usuario*/
 case leyendo_rutaimagen: strcpy(&(p_temporal->ruta_imagen[0]), &cl[0]);
 estado= espera;
 /*aqui iria el codigo para cargar la imagen*/
 /*añadiendo al participante a la lista de participantes*/
- Código: Seleccionar todo
- if(participantes == NULL){
 p_temporal->siguiente= p_temporal;
 p_temporal->anterior= p_temporal;
 participantes= p_temporal;
 }else{
 p_temporal->siguiente= participantes->siguiente;
 p_temporal->anterior= participantes;
 (participantes->siguiente)->anterior= p_temporal;
 participantes->siguiente= p_temporal;
 participantes= p_temporal;
 }
 break;
 /*si el estado es de espera, reservamos memoria para un nuevo participante y comenzamos a cargarlo*/
- Código: Seleccionar todo
- case espera: p_temporal= (participante *) malloc(sizeof(participante));
 /*copiando la cadena leida del archivo al nombre del nuevo participante*/
 strcpy(&(p_temporal->nombre[0]), &cl[0]);
 estado= leyendo_participante;
 break;
 default: break;
 }
 }
 fclose(archivo);
 }else{
 r=2;
 printf("Error abriendo archivo %s\n", ruta_archivo);
 }
 }else{
 r=1;
 }
 lista_participantes= participantes->siguiente;
 return r;
 }
archivos.h
- Código: Seleccionar todo
- /*
 Random selection of competitors Copyright (C) 2009 Jesús Hernández Gormaz
 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License as
 published by the Free Software Foundation; either version 3, or
 (at your option) any later version.
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 Este programa es software libre. Puede redistribuirlo y/o
 modificarlo bajo los términos de la Licencia Pública General
 de GNU según es publicada por la Free Software Foundation,
 bien de la versión 3 de dicha Licencia o bien (según su
 elección) de cualquier versión posterior.
 Este programa se distribuye con la esperanza de que sea
 útil, pero SIN NINGUNA GARANTÍA, incluso sin la garantía
 MERCANTIL implícita o sin garantizar la CONVENIENCIA PARA UN
 PROPÓSITO PARTICULAR. Para más detalles, véase la Licencia
 Pública General de GNU.
 Debería haber recibido una copia de la Licencia Pública
 General junto con este programa. En caso contrario, escriba
 a la Free Software Foundation, Inc., en 675 Mass Ave,
 Cambridge, MA 02139, EEUU.
 */
- Código: Seleccionar todo
- /*evitando que se vuelva a compilar este archivo de cabecera en un programa en C*/
 #ifndef _ARCHIVOS_
 #define _ARCHIVOS_
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
 #include "main.h"
 #include "tipos_listas.h"
 /*declaracion de funciones*/
 /* carga la lista de competidores con las categorias en las que participa cada uno,
 genera ademas de la lista de participantes la lista de categorias distintas que existan en total*/
 int cargar_participantes(char *ruta_archivo);
 #endif
tipos_listas.h
- Código: Seleccionar todo
- /*
 Random selection of competitors Copyright (C) 2009 Jesús Hernández Gormaz
 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License as
 published by the Free Software Foundation; either version 3, or
 (at your option) any later version.
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 Este programa es software libre. Puede redistribuirlo y/o
 modificarlo bajo los términos de la Licencia Pública General
 de GNU según es publicada por la Free Software Foundation,
 bien de la versión 3 de dicha Licencia o bien (según su
 elección) de cualquier versión posterior.
 Este programa se distribuye con la esperanza de que sea
 útil, pero SIN NINGUNA GARANTÍA, incluso sin la garantía
 MERCANTIL implícita o sin garantizar la CONVENIENCIA PARA UN
 PROPÓSITO PARTICULAR. Para más detalles, véase la Licencia
 Pública General de GNU.
 Debería haber recibido una copia de la Licencia Pública
 General junto con este programa. En caso contrario, escriba
 a la Free Software Foundation, Inc., en 675 Mass Ave,
 Cambridge, MA 02139, EEUU.
 */
- Código: Seleccionar todo
- /*evitando que se vuelva a compilar este archivo de cabecera en un programa en C*/
 #ifndef _TIPOS_LISTAS_
 #define _TIPOS_LISTAS_
 /*declaracion de tipos de datos nuevos*/
 /* estructura de un elemento de la lista de categorias*/
 typedef struct categoria{
 char nombre[101];
 float puntuacion;
 struct categoria *siguiente;
 struct categoria *anterior;
 } categoria;
 /* estructura de un elemento de la lista de participantes*/
 typedef struct participante{
 char nombre[101];
 unsigned int edad;
 categoria categorias[100];
 char ruta_imagen[201];
 /*falta linea para guardar la imagen una vez cargada del archivo*/
 struct participante *siguiente;
 struct participante *anterior;
 } participante;
- Código: Seleccionar todo
- /* estructura de un elemento de la lista de referencias de participantes.
 con esta estructura se puede hacer una lista con los elementos de
 una lista de participantes sin modificar la posicion de los
 elementos en la lista original y podiendo cambiar la posicion en
 la lista que hace referencia a elementos de la lista original y
 podiendo alterar las propiedades de los elementos desde la lista
 de referencias, esto tambien permite el ahorro de memoria RAM al
 no necesitar copiar elementos de una lista en otra lista nueva
 y ahorra procesamiento al no tener que actualizar despues los
 cambios de la lista nueva en los elementos de la original*/
 typedef struct referencia_participante{
 participante *referencia;
 struct referencia_participante *siguiente;
 struct referencia_participante *anterior;
 } referencia_participante;
 /* estructura de una lista de referencias a participantes de una categoria.
 con esta estructura se puede hacer una lista de participantes de una
 categoria sin modificar la posicion de los mismos en la lista original
 con todos los participantes de todas las categorias, podiendo alterar
 las propiedades de los elementos desde la lista de referencias.*/
 typedef struct lista_referencia_participantes_categoria{
 categoria *categoria;
 referencia_participante *primero;
 referencia_participante *participantes;
 } lista_referencia_participantes_categoria;
 #endif
main.c
- Código: Seleccionar todo
- /*
 Nombre del programa: Random selection of competitors
 Version: 0.0.0.0
 Descripcion del programa: Selecciona parejas de competidores de una lista de forma aleatoria.
 Autor del programa: Jesús Hernández Gormaz
 Correo electronico del autor: elrinconjhg@gmail.com
 Pagina web del autor: http://www.elrinconjhg.ya.st/
 Random selection of competitors Copyright (C) 2009 Jesús Hernández Gormaz
 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License as
 published by the Free Software Foundation; either version 3, or
 (at your option) any later version.
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 Este programa es software libre. Puede redistribuirlo y/o
 modificarlo bajo los términos de la Licencia Pública General
 de GNU según es publicada por la Free Software Foundation,
 bien de la versión 3 de dicha Licencia o bien (según su
 elección) de cualquier versión posterior.
 Este programa se distribuye con la esperanza de que sea
 útil, pero SIN NINGUNA GARANTÍA, incluso sin la garantía
 MERCANTIL implícita o sin garantizar la CONVENIENCIA PARA UN
 PROPÓSITO PARTICULAR. Para más detalles, véase la Licencia
 Pública General de GNU.
 Debería haber recibido una copia de la Licencia Pública
 General junto con este programa. En caso contrario, escriba
 a la Free Software Foundation, Inc., en 675 Mass Ave,
 Cambridge, MA 02139, EEUU.
 */
- Código: Seleccionar todo
- #include "main.h"
 int main(int argc, char *argv[]){
 register int r=0;
 cargar_participantes("lista_competidores.csv");
 printf("Nombre: %s\n", &(lista_participantes->nombre[0]));
 liberar_lista();
 return r;
 }
- Código: Seleccionar todo
- int liberar_lista(void){
 register int r=0;
 participante *a_borrar_p, *auxiliar_p;
 a_borrar_p= lista_participantes->siguiente;
 do{
 if(a_borrar_p == lista_participantes){
 free(a_borrar_p);
 lista_participantes= NULL;
 }else{
 auxiliar_p= a_borrar_p->siguiente;
 free(a_borrar_p);
 a_borrar_p= auxiliar_p;
 }
 }while(lista_participantes != NULL);
 return r;
 }
main.h
- Código: Seleccionar todo
- /*
 Random selection of competitors Copyright (C) 2009 Jesús Hernández Gormaz
 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License as
 published by the Free Software Foundation; either version 3, or
 (at your option) any later version.
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 Este programa es software libre. Puede redistribuirlo y/o
 modificarlo bajo los términos de la Licencia Pública General
 de GNU según es publicada por la Free Software Foundation,
 bien de la versión 3 de dicha Licencia o bien (según su
 elección) de cualquier versión posterior.
 Este programa se distribuye con la esperanza de que sea
 útil, pero SIN NINGUNA GARANTÍA, incluso sin la garantía
 MERCANTIL implícita o sin garantizar la CONVENIENCIA PARA UN
 PROPÓSITO PARTICULAR. Para más detalles, véase la Licencia
 Pública General de GNU.
 Debería haber recibido una copia de la Licencia Pública
 General junto con este programa. En caso contrario, escriba
 a la Free Software Foundation, Inc., en 675 Mass Ave,
 Cambridge, MA 02139, EEUU.
 */
- Código: Seleccionar todo
- /*evitando que se vuelva a compilar este archivo de cabecera en un programa en C*/
 #ifndef _MAIN_
 #define _MAIN_
 #include <stdlib.h>
 #include <stdio.h>
 #include <math.h>
 #include <time.h>
 #include <string.h>
 #include "tipos_listas.h"
 #include "archivos.h"
 #include "GNA_JHG.h"
- Código: Seleccionar todo
- /*declaracion de macros y constantes*/
 #define NOM "Random selection of competitors"
 #define VER "0.0.0.0"
 /*detectando el sistema en el que se esta compilando*/
 #ifndef SO
 #ifdef linux
 #define SO "GNU/Linux"
 #endif
 #endif
 #ifndef SO
 #ifdef __linux__
 #define SO "GNU/Linux"
 #endif
 #endif
 #ifndef SO
 #ifdef unix
 #define SO "Unix"
 #endif
 #endif
 #ifndef SO
 #ifdef __unix__
 #define SO "Unix"
 #endif
 #endif
 #ifndef SO
 #ifdef WIN32
 #define SO "Windows"
 #endif
 #endif
 #ifndef SO
 #define SO "desconocido"
 #endif
 /* fin de la deteccion del sistema en el que se esta compilando*/
- Código: Seleccionar todo
- /*variables globales*/
 participante *lista_participantes=NULL;
 char titulo_campeonato[101];
- Código: Seleccionar todo
- /*declaracion de funciones*/
 /* libera todos los elementos de la lista de participantes y de categorias*/
 int liberar_lista(void);
 #endif
GNA_JHG.h
- Código: Seleccionar todo
- /*
 Nombre: Generador de numeros aleatorios JHG
 Copyright:
 Autor: Jesús Hernández Gormaz
 Fecha: Lunes 25 de Agosto del 2008
 Descripcion: Funciones para la generacion de numeros verdaderamente aleatorios (no cuasi-aleatorios)
 y de comprobacion del funcionamiento del generador de numeros aleatorios.
 */
 /*devuelve un byte aleatorio a partir de varios bytes aleatorios de forma que aumenta la calidad del byte aleatorio devuelto*/
 unsigned char Byte_Aleatorio(void);
 /*devuelve un byte pseudoaleatorio*/
 unsigned char Byte_Pseudoleatorio(void);
 /*comprueba el correcto funcionamiento del generador de numeros aleatorios*/
 int Comprobar_Generador_Numeros_Aleatorios(void);
GNA_JHG.c
- Código: Seleccionar todo
- /*
 Nombre: Generador de numeros aleatorios JHG
 Copyright:
 Autor: Jesús Hernández Gormaz
 Fecha: Lunes 25 de Agosto del 2008
 Descripcion: Funciones para la generacion de numeros verdaderamente aleatorios (no cuasi-aleatorios)
 y de comprobacion del funcionamiento del generador de numeros aleatorios.
 Tambien inclulle una funcion para obtener numeros pseudoaleatorios (cuasi-aleatorios)
 tomando como semillas numeros aleatorios obtenidos con las funciones de numeros aleatorios.
 */
- Código: Seleccionar todo
- #include <time.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include "GNA_JHG.h"
 /*Genera un byte aleatorio mediante la recogida y tratamiento de bits aleatorios*/
 unsigned char Byte_Aleatorio_Recogida(void);
 /*comprueba si el buffer de bytes aleatorios pasa el test de monobit*/
 int Test_monobit(unsigned char *buffer);
 /*comprueba si el buffer de bytes aleatorios pasa el test de poker*/
 int Test_poker(unsigned char *buffer);
 /*comprueba si el buffer de bytes aleatorios pasa el test de runs*/
 int Test_runs(unsigned char *buffer);
 /*comprueba si el buffer de bytes aleatorios pasa el test de longrun*/
 int Test_longrun(unsigned char *buffer);
 /*pasa un buffer de bytes aleatorios por todos los tests disponibles*/
 int Comprobar_Tests(void);
- Código: Seleccionar todo
- unsigned char Byte_Aleatorio_Recogida(void){
 /*variables para la recogida de bits aleatorios*/
 unsigned char c[32];
 unsigned int u[32];
 unsigned int b[32];
 unsigned long e;
 unsigned long *a;
 unsigned int i;
 /*variables de control*/
 unsigned long o=0;
 /*recogida de bits aleatorios y tratamiento rapido*/
 i+= ((clock() % 101) + 1);
 if(e != 0 && i != 0){
 i+= e;
 i++;
 }
 i+= ((clock() % 65000) + 3);
 a= malloc(64 * sizeof(long));
 if(a != NULL){
 for(e=0; e < 64; e++){
 if(*(a + e) != 0){
 o++;
 i+= (*(a + e));
 }
 }
 i+= o;
 free(a);
 }
 for(e=0; e < 32; e++){
 if(u[e] != 0){
 i+= u[e];
 }
 }
 i+= ((clock() % 65000) + 3);
 for(e=0; e < 32; e++){
 if(b[e] != 0){
 i+= b[e];
 }
 }
 o= 0;
 e= clock();
 while(o < 2 && o >= 0){
 o= (clock() - e);
 }
 i+= ((clock() % 32500) + 3);
 for(e=0; e < 32; e++){
 if(c[e] != 0){
 i+= c[e];
 }
 }
- Código: Seleccionar todo
- /*tratamiento de los bits recogidos*/
 i= i % 256;
 return (unsigned char)i;
 }
- Código: Seleccionar todo
- /*devuelve un byte aleatorio a partir de bytes aleatorios formados por la recogida de bits aleatorios, de forma que incrementa la calidad del byte aleatorio devuelto*/
 unsigned char Byte_Aleatorio(void){
 static unsigned char n=0, r=0;
 register unsigned char nn=0, nr;
 if(n == 0){
 n= Byte_Aleatorio_Recogida();
 }
 if(r == 0){
 r= Byte_Aleatorio_Recogida();
 }
 for(nr=0; nr < r; nr++){
 nn= Byte_Aleatorio_Recogida();
 }
 r= (r + nn) % 255;
 r= (r * r) % n;
 return r;
 }
- Código: Seleccionar todo
- /*devuelve un byte pseudoaleatorio*/
 unsigned char Byte_Pseudoleatorio(void){
 static unsigned char n=0, r=0, i=0;
 if((n == 0 && i == 0) || i == 1000){
 n= Byte_Aleatorio_Recogida();
 }
 if((r == 0 && i == 0) || i == 1000){
 r= Byte_Aleatorio_Recogida();
 }else{
 r= (r * r) % n;
 }
 i++;
 return r;
 }
- Código: Seleccionar todo
- int Test_monobit(unsigned char *buffer){
 register int unos=0,i,j;
 register unsigned char ch;
 for (i=0; i<2500; i++){
 for (j=0; j<8; j++){
 if ((((*(buffer+i)) >> (j)) & 1)) unos++;
 }
 }
 if (9725<unos && unos<10275) return 0;
 else return 1;
 }
- Código: Seleccionar todo
- int Test_poker(unsigned char *buffer){
 int f[16];
 register int i;
 register unsigned char ch;
 register float x;
 for (i=0; i<16; i++) f[i]=0;
 for (i=0; i<2500; i++) {
 ch=*(buffer+i);
 f[(((ch)>>4)&0xF)]++;
 f[((ch)&0xF)]++;
 }
 x=0.0;
 for (i=0; i<16; i++)
 x += f[i]*f[i];
 x = (x*16.0/5000.0)-5000.0;
 if (2.16< x && x<46.17) return 0;
 else return 1;
 }
- Código: Seleccionar todo
- int Test_runs(unsigned char *buffer){
 register int i,j,cuenta;
 int r[6][2];
 register unsigned char ch;
 for(i=0; i<6; i++) {
 r[i][0]=0;
 r[i][1]=0;
 }
 ch=(((*buffer) >> (0)) & 1);
 cuenta=0;
 for (i=0; i<2500; i++) {
 for (j=0; j<8; j++) {
 if ((((*(buffer+i)) >> (j)) & 1)==ch) cuenta++;
 else {
 if(cuenta>6){
 cuenta=6;
 }
 r[cuenta-1][ch]++;
 ch = !ch;
 cuenta=1;
 }
 }
 }
 if(cuenta>6){
 cuenta=6;
 }
 r[cuenta-1][ch]++;
 for(i=0; i<2; i++){
 if (r[0][i]<2343 || r[0][i]>2657) return 1;
 if (r[1][i]<1135 || r[1][i]>1365) return 1;
 if (r[2][i]< 542 || r[2][i]> 708) return 1;
 if (r[3][i]< 251 || r[3][i]> 373) return 1;
 if (r[4][i]< 111 || r[4][i]> 201) return 1;
 if (r[5][i]< 111 || r[5][i]> 201) return 1;
 }
 return 0;
 }
- Código: Seleccionar todo
- int Test_longrun(unsigned char *buffer){
 register int i,j,maxc=-1,cuenta;
 register unsigned char ch;
 ch=(((*buffer) >> (0)) & 1);
 cuenta=0;
 for (i=0; i<2500; i++) {
 for (j=0; j<8; j++) {
 if ((((*(buffer+i)) >> (j)) & 1)==ch) cuenta++;
 else {
 if (cuenta>maxc) maxc=cuenta;
 ch=!ch;
 cuenta=1;
 }
 }
 }
 if (cuenta>maxc) maxc=cuenta;
 if (maxc>=26) return 1;
 else return 0;
 }
- Código: Seleccionar todo
- int Comprobar_Tests(void){
 register int r=0, l;
 unsigned char buffer[2500];
 for(l=0; l<2500; l++){
 buffer[l]= Byte_Aleatorio();
 }
 r+= Test_longrun(&buffer[0]);
 r+= Test_runs(&buffer[0]);
 r+= Test_poker(&buffer[0]);
 r+= Test_monobit(&buffer[0]);
 return r;
 }
- Código: Seleccionar todo
- /*comprueba el correcto funcionamiento del generador de numeros aleatorios*/
 int Comprobar_Generador_Numeros_Aleatorios(void){
 register int r=0;
 while(Comprobar_Tests() != 0 && r < 6){
 r++;
 }
 if(r < 5){
 r= 0;
 }
 return r;
 }
Makefile
- Código: Seleccionar todo
- # Archivo make de compilacion de Random selection of competitors en su version 0.0.0.0
 #
 # Random selection of competitors Copyright (C) 2009 Jesús Hernández Gormaz
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License as
 # published by the Free Software Foundation; either version 3, or
 # (at your option) any later version.
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 # GNU General Public License for more details.
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 #
 # Este programa es software libre. Puede redistribuirlo y/o
 # modificarlo bajo los términos de la Licencia Pública General
 # de GNU según es publicada por la Free Software Foundation,
 # bien de la versión 3 de dicha Licencia o bien (según su
 # elección) de cualquier versión posterior.
 # Este programa se distribuye con la esperanza de que sea
 # útil, pero SIN NINGUNA GARANTÍA, incluso sin la garantía
 # MERCANTIL implícita o sin garantizar la CONVENIENCIA PARA UN
 # PROPÓSITO PARTICULAR. Para más detalles, véase la Licencia
 # Pública General de GNU.
 # Debería haber recibido una copia de la Licencia Pública
 # General junto con este programa. En caso contrario, escriba
 # a la Free Software Foundation, Inc., en 675 Mass Ave,
 # Cambridge, MA 02139, EEUU.
- Código: Seleccionar todo
- CC=gcc
 CFLAGS=-Wall -ggdb
 #CFLAGS=-L/usr/lib -lSDL -lSDL_image -lSDL_mixer -lpthread -I/usr/include/SDL -D_REENTRANT -Wall -g
- Código: Seleccionar todo
- Random_selection_competitors: main.o archivos.o GNA_JHG.o
 $(CC) $(CFLAGS) -o $@ $^
 main.o: main.c
 $(CC) $(CFLAGS) -c -o $@ $^
 archivos.o: archivos.c
 $(CC) $(CFLAGS) -c -o $@ archivos.c
 GNA_JHG.o: GNA_JHG.c
 $(CC) $(CFLAGS) -c -o $@ $^
- Código: Seleccionar todo
- # Archivos con funciones que devuelven una superficie SDL con la
 # imagen que tengan guardada en una estructura estatica constante
 # dentro de dicha funcion.
 #
 # Logo de licencia GPL version 3.
 logo_gpl3.o: logo_gpl3.c
 $(CC) $(CFLAGS) -c -o $@ $^
 # Logo de SDL
 logo_SDL.o: logo_SDL.c
 $(CC) $(CFLAGS) -c -o $@ $^
 # Logo de OpenGL
 logo_OpenGL.o: logo_OpenGL.c
 $(CC) $(CFLAGS) -c -o $@ $^
 # Tux, logo de Linux
 tux_bwt.o: tux_bwt.c
 $(CC) $(CFLAGS) -c -o $@ $^
 .SILENT:
Como habreis visto en el codigo, hay algunas estructuras o algunas partes de las estructuras que no se usan, es por que el programa aun estoi comenzandolo y ya me encontre el problema al compilarlo; tambien es porque aunque ahora lo estoi haciendo como un programa para poder acabarlo lo antes posible porque necesito acabarlo pronto, despues tengo pensado usar la mayoria de las funciones de este programa en otro programa haciendo que lo que ahora tiene que hacer el programa sea una funcionalidad mas del otro programa donde en el futuro tengo pensado incorporarlo. El codigo del archivo GNA_JHG.c no creo que tenga nada que ver con el problema pues ese codigo ya lo he usado en otros programas y funciona me ha funcionado bien.
No he podido usar gdb por como no he podido compilarlo como ya os dije, por lo que si alguien sabe el problema, me seria de mucha ayuda.
Gracias de antemano.


