Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: kraiked en 21 Julio 2016, 23:01 pm



Título: linkado en c++? allegro5/allegro.h
Publicado por: kraiked en 21 Julio 2016, 23:01 pm
Hola, acabo de empezar a programar en c++. La cosa es que me he bajado las bibliotecas de Allegro5 y cuando realizo este programa para iniciar una ventana:
Código:
 #include <iostream>
#include <stdlib.h>
#include "stdio.h"
#include <allegro5/allegro.h>

using namespace std;

int main(int argc, char **argv){
 
   ALLEGRO_DISPLAY *display = NULL;
 
   if(!al_init()) {
      fprintf(stderr, "failed to initialize allegro!\n");
      return -1;
   }
 
   display = al_create_display(640, 480);

   if(!display) {
      fprintf(stderr, "failed to create display!\n");
      return -1;
   }
 
   al_clear_to_color(al_map_rgb(0,0,0));
 
   al_flip_display();
 
   al_rest(10.0);
 
   al_destroy_display(display);
 
   return 0;
}

y compilo con un makefile hecho por mi me sale que no reconoce las funciones de Allegro5. exactamente pone esto: "/home/****/Escritorio/comecocos_cpp/main_juego.cpp:15: referencia a `al_install_system' sin definir
/home/****/Escritorio/comecocos_cpp/main_juego.cpp:20: referencia a `al_create_display' sin definr " pero lo pone con todas sus funciones de allegro5 no solo con esas. Entonces creo que es un problema al linkear las bibliotecas, aunque tampoco estoy muy seguro.


el makefile es este:


Código:
CXX=g++
CFLAGS= -g -Wall -ansi -pedantic
LDFLAGS=-L/usr/lib -lallegro
INCLUDE=-I. -I/usr/include/allegro5

EJECUTABLE = juego

all: $(EJECUTABLE)

juego: main_juego.o
$(CXX) -o salida main_juego.o

main_juego.o: main_juego.cpp
$(CXX)  $(INCLUDE) $(CFLAGS) $(LDFLAGS) main_juego.cpp


Y como me acabo de iniciar en c++ pues no tengo mucha idea. Muchas gracias. Saludos


Título: Re: linkado en c++? allegro5/allegro.h
Publicado por: AlbertoBSD en 21 Julio 2016, 23:23 pm
Deberias de empezar con algo mas sencillo pero de igual manera valida que exista el directorio

/usr/include/allegro5

Saludos!


Título: Re: linkado en c++? allegro5/allegro.h
Publicado por: kraiked en 21 Julio 2016, 23:50 pm
Saludos, gracias por responder. respecto a lo de empezar, bueno, se mas o menos c, que es lo que di 1º ing informatica. A lo mejor es un poco complicado empezar con allegro5 pero como tengo el verano por delante tengo tiempo de aprender c++ más allegro :)

Respecto a los directorios si que existen. Es más si compilo desde la terminal con este comando:

"****@****-desktop:~/Escritorio/comecocos_cpp$ g++ main_juego.cpp -o a.out -I/usr/include/allegro5 -L/usr/lib -lallegro"

SI que reconoce los archivos,compila perfectamente,  no genera ningún error.  y genera una salida, la cual puedo ejecutar y genera una pantalla, que es el objetivo de mi código.

Asi que supongo que el error estará en el makefile.

Muchas gracias por su tiempo y responderme :)


Título: Re: linkado en c++? allegro5/allegro.h
Publicado por: AlbertoBSD en 22 Julio 2016, 00:00 am
Citar
como tengo el verano por delante tengo tiempo de aprender c++ más allegro

 ;-) ;-) ;-)

Muy bien, lo bueno que si compilo asi, si el error estara en el makefile posiblemente alguno de los flags que tiene

Código:
CFLAGS= -g -Wall -ansi -pedantic

Seria de revisarlos de uno en uno a ver cual es el te pone los WARNINS (-Wall)  :xD

Saludos


Título: Re: linkado en c++? allegro5/allegro.h
Publicado por: kraiked en 22 Julio 2016, 13:56 pm
El problema no está en que salgan warnings el problema esta en que no reconoce las funciones de Allegro5. ya que al compilar con el makefile sale esto:


/tmp/ccuudCEQ.o: En la función `main':
main_juego.cpp:(.text+0x23): referencia a `al_install_system' sin definir
main_juego.cpp:(.text+0x61): referencia a `al_create_display' sin definir
main_juego.cpp:(.text+0xa5): referencia a `al_map_rgb' sin definir
main_juego.cpp:(.text+0xda): referencia a `al_clear_to_color' sin definir
main_juego.cpp:(.text+0xdf): referencia a `al_flip_display' sin definir
main_juego.cpp:(.text+0xf7): referencia a `al_rest' sin definir
main_juego.cpp:(.text+0x103): referencia a `al_destroy_display' sin definir
collect2: error: ld returned 1 exit status


Lo que me da que pensar que no enlaza bien. Y más sabiendo que si compilo de forma manual desde la terminal si funciona


Título: Re: linkado en c++? allegro5/allegro.h
Publicado por: kraiked en 22 Julio 2016, 14:12 pm
vale, acabo de encontrar el error, es una chorrada. Faltaba añadir un -c en el makefile

"main_juego.o: main_juego.cpp
   $(CXX) $(INCLUDE) $(LDFLAGS) $(CFLAGS) -c main_juego.cpp"

el "-c" es lo que me faltaba. Vaya chorrada. Muchas gracias por tus respuestas Alberto :) Un saludo