linkado en c++? allegro5/allegro.h

Iniciado por kraiked, 21 Julio 2016, 23:01 PM

0 Miembros y 1 Visitante están viendo este tema.

kraiked

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: #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:


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

AlbertoBSD

Deberias de empezar con algo mas sencillo pero de igual manera valida que exista el directorio

/usr/include/allegro5

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

kraiked

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 :)

AlbertoBSD

Citarcomo 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

CFLAGS= -g -Wall -ansi -pedantic

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

Saludos
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

kraiked

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

kraiked

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