• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z kompilacją allero i openGL w konsoli linuksa

Object Storage Arubacloud
0 głosów
224 wizyt
pytanie zadane 16 listopada 2017 w C i C++ przez Tomek Wilnowski Użytkownik (610 p.)
edycja 16 listopada 2017 przez Tomek Wilnowski

Pierwszy problem jest z allegro.

Biblioteki do allegro znajdują się u mnie w katalogu /usr/lib , mam tam skompilowane biblioteki allegro z końcówką .so

Dobra kompilują program z allegro.
Mam mój program main.c wchodzę do tego katalogu /home/donmatteo/mojprogram/ tutaj mam program  main.c kompiluję następująco g++ main.c -l allegro , program kompiluje mi się! ale jeszcze z otworzeniem tego pliku jest problem... Po kompilacji tworzy mi się w tym katalogu plik a.out, więc otwieram ./a.out ale wyskakuje error nie falied to initialize allegro! ,Jeszcze po kompilacji muszę allegro podlinkować ? Jak?

Dobra to jest błąd kod błędu pochodzący bezpośrednio z programu który kompilowałem: 

 #include <stdio.h>
#include <allegro5/allegro.h>

const float FPS = 60;
const int SCREEN_W = 640;
const int SCREEN_H = 480;
const int BOUNCER_SIZE = 32;

int main(int argc, char **argv)
{
   ALLEGRO_DISPLAY *display = NULL;
   ALLEGRO_EVENT_QUEUE *event_queue = NULL;
   ALLEGRO_TIMER *timer = NULL;
   ALLEGRO_BITMAP *bouncer = NULL;
   float bouncer_x = SCREEN_W / 2.0 - BOUNCER_SIZE / 2.0;
   float bouncer_y = SCREEN_H / 2.0 - BOUNCER_SIZE / 2.0;
   bool redraw = true;

   if(!al_init()) {
      fprintf(stderr, "failed to initialize allegro!\n");
      return -1;
   }

   if(!al_install_mouse()) {
      fprintf(stderr, "failed to initialize the mouse!\n");
      return -1;
   }

   timer = al_create_timer(1.0 / FPS);
   if(!timer) {
      fprintf(stderr, "failed to create timer!\n");
      return -1;
   }

   display = al_create_display(SCREEN_W, SCREEN_H);
   if(!display) {
      fprintf(stderr, "failed to create display!\n");
      al_destroy_timer(timer);
      return -1;
   }

   bouncer = al_create_bitmap(BOUNCER_SIZE, BOUNCER_SIZE);
   if(!bouncer) {
      fprintf(stderr, "failed to create bouncer bitmap!\n");
      al_destroy_display(display);
      al_destroy_timer(timer);
      return -1;
   }

   al_set_target_bitmap(bouncer);

   al_clear_to_color(al_map_rgb(255, 0, 255));

   al_set_target_bitmap(al_get_backbuffer(display));

   event_queue = al_create_event_queue();
   if(!event_queue) {
      fprintf(stderr, "failed to create event_queue!\n");
      al_destroy_bitmap(bouncer);
      al_destroy_display(display);
      al_destroy_timer(timer);
      return -1;
   }

   al_register_event_source(event_queue, al_get_display_event_source(display));

   al_register_event_source(event_queue, al_get_timer_event_source(timer));

   al_register_event_source(event_queue, al_get_mouse_event_source());

   al_clear_to_color(al_map_rgb(0,0,0));

   al_flip_display();

   al_start_timer(timer);

   while(1)
   {
      ALLEGRO_EVENT ev;
      al_wait_for_event(event_queue, &ev);

      if(ev.type == ALLEGRO_EVENT_TIMER) {
         redraw = true;
      }
      else if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) {
         break;
      }
      else if(ev.type == ALLEGRO_EVENT_MOUSE_AXES ||
              ev.type == ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY) {

         bouncer_x = ev.mouse.x;
         bouncer_y = ev.mouse.y;
      }
      else if(ev.type == ALLEGRO_EVENT_MOUSE_BUTTON_UP) {
          break;
      }

      if(redraw && al_is_event_queue_empty(event_queue)) {
         redraw = false;

         al_clear_to_color(al_map_rgb(0,0,0));

         al_draw_bitmap(bouncer, bouncer_x, bouncer_y, 0);

         al_flip_display();
      }
   }

   al_destroy_bitmap(bouncer);
   al_destroy_timer(timer);
   al_destroy_display(display);
   al_destroy_event_queue(event_queue);

   return 0;
}

Ale dlaczego ten ekranik nie chce mi się otworzyć, a program zwraca ten błąd?
Problem z opengl też jest z kompilacją. Na tym etapie się zatrzymałem,  Polecenie wygląda następująco;
g++ -o  keyboardAndMouse.cpp main.cpp -I /usr/include/x86_64-linux-gnu/qt5/QtCore -I /usr/include/x86_64-linux-gnu/qt5 -I /usr/include/x86_64-linux-gnu/qt5/QtXml -I /usr/include/x86_64-linux-gnu/qt5/QtOpenGL -I /usr/include/x86_64-linux-gnu/qt5/QtGui -lQGLVieweL -l GL -lQtOpenGL -lQtGui -l/usr/include/x86_64-linux-gnu/qt5/QtCore/ -I /usr/include/x86_64-linux-gnu/qt5/QtWidgets/

No i wynik polecenia:
In file included from /usr/include/x86_64-linux-gnu/qt5/QtCore/qnamespace.h:37:0,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs.h:41,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/qobject.h:40,
                 from /usr/include/x86_64-linux-gnu/qt5/QtCore/QObject:1,
                 from /usr/include/QGLViewer/keyFrameInterpolator.h:26,
                 from /usr/include/QGLViewer/camera.h:26,
                 from /usr/include/QGLViewer/qglviewer.h:26,
                 from keyboardAndMouse.h:1,
                 from main.cpp:1:
/usr/include/x86_64-linux-gnu/qt5/QtCore/qglobal.h:1087:4: error: #error "You must build your code with position independent code if Qt was built with -reduce-relocations. " "Compile your code with -fPIC (-fPIE is not enough)."
 #  error "You must build your code with position independent code if Qt was built with -reduce-
    ^

sprawdziłem że plik qglobal.h znalazłem w katalogu /usr/lib i również nie moę tego po prostu skompilować.

komentarz 16 listopada 2017 przez j23 Mędrzec (194,920 p.)

Zastosowałeś się do "Compile your code with -fPIC (-fPIE is not enough)." ?

komentarz 16 listopada 2017 przez Tomek Wilnowski Użytkownik (610 p.)
Tak: Wynik

main.cpp:2:26: fatal error: qapplication.h: Nie ma takiego pliku ani katalogu
compilation terminated.
komentarz 16 listopada 2017 przez j23 Mędrzec (194,920 p.)
edycja 16 listopada 2017 przez j23
Nie rozumiem, dlaczego bierzesz OpenGL-a z Qt, zamiast poszukać właściwej biblioteki (libopengl32.a?).

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
4 odpowiedzi 9,090 wizyt
0 głosów
1 odpowiedź 111 wizyt
pytanie zadane 10 kwietnia w C i C++ przez sensor Użytkownik (680 p.)
0 głosów
0 odpowiedzi 65 wizyt
pytanie zadane 8 czerwca 2018 w Systemy operacyjne, programy przez Alfowicz Nowicjusz (140 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...