Forum Linux.pl

Programowanie => C/C++ => Wątek zaczęty przez: sam_on w 2007-09-21, 13:00:05

Tytuł: Bibilioteka allegro
Wiadomość wysłana przez: sam_on w 2007-09-21, 13:00:05
Od jakiegoś czasu trochę programuję i postanowiłem napisać wreszcie coś, co można pokazać innym - jakas gierke, albo cokolwiek z grafiką, a nie jakis konsolowy programik. Kolega polecił mi bibliotekę allegro.

Instalowałem ją z i z paczki tar.gz, próbowałem też przez yasta, ale efekt jest taki, że wprawdzie kod
#include 
#include

int main()
{
return 0;
}
Się kompiluje, ale kod
#include 
#include

int main() {
    allegro_init();
    allegro_exit();
    return 0;
}
się nie kompiluje.

Po komendzie g++ main.cpp wywala mi
/tmp/cc84wRRk.o: In function `main':
main.cpp:(.text+0xa4): undefined reference to `_install_allegro_version_check'
main.cpp:(.text+0xa9): undefined reference to `allegro_exit'
collect2: ld returned 1 exit status
Po komendzie g++ main.cpp -lalleg otrzymuję
/usr/lib/gcc/i586-suse-linux/4.1.2/../../../../i586-suse-linux/bin/ld: cannot find -lalleg
collect2: ld returned 1 exit status
Mam openSUSE 10.2 i wersję gcc 4.1.2.

Co powinienem zrobić?
Tytuł: Bibilioteka allegro
Wiadomość wysłana przez: mariuszadamski w 2007-09-21, 19:33:11
Spróbuj tak:
g++ main.cpp `allegro-config --libs --shared`
Tytuł: Bibilioteka allegro
Wiadomość wysłana przez: sam_on w 2007-09-23, 11:56:56
Instalowałem to od nowa.
Tym razem przed ./configure dopisałem ./fix.sh unix. Nadal nie działało ale po dopisaniu `allegro-config --libs --shared` zaczeło mi się kompilować i działać.

Ściągnąłem sobie pierwszy z brzegu tutorial ze strony allegro http://www.glost.eclipse.co.uk/gfoot/vivace/vivall.zip
Programy jednoplikowe kompilują się (czasmi wprawdzie z ostrzeżeniami np.
0424.c:33: warning: ‘textout’ is deprecated (declared at /usr/local/include/allegro/alcompat.h:157)
, ale działają.

Jednak programów wieloplikowych nie udaje mi się skompilować, np. po próbie skompilowania prykładu ex_1_a z chaptera 5
g++ 051s.c `allegro-config --libs --shared`
wyskakuje mi
/tmp/ccjoOpsA.o: In function `shutdown()':
051s.c:(.text+0x9b): undefined reference to `circle_destroy(circle_t*)'
/tmp/ccjoOpsA.o: In function `output()':
051s.c:(.text+0xc7): undefined reference to `circle_erase(circle_t*, BITMAP*)'
051s.c:(.text+0xde): undefined reference to `circle_draw(circle_t*, BITMAP*)'
/tmp/ccjoOpsA.o: In function `process()':
051s.c:(.text+0xf9): undefined reference to `circle_update(circle_t*)'
/tmp/ccjoOpsA.o: In function `init()':
051s.c:(.text+0x294): undefined reference to `circle_init(int, int, int, int, int, int)'
051s.c:(.text+0x2d6): undefined reference to `circle_draw(circle_t*, BITMAP*)'
collect2: ld returned 1 exit status
Ściągałem też przykłądy z innych stron i działały (wszystkie były jednoplikowe). Oznacza to że coś jeszcze mam nie tak czy po prostu źle się zabieram to przedstawionego wyżej tutoriala?
Tytuł: Bibilioteka allegro
Wiadomość wysłana przez: mrblur w 2007-09-23, 12:15:03
Programy wieloplikowe kompiluje się po kolei, a potem łączy linkerem (g++ plik1.o plik2.o -o program {biblioteki})
Przykłady allegro są przeznaczone do kompilacji przez załączony Makefile, jeśli go nie ma - sprawdź, czy twoja dystrybucja nie udostępnia allegro-examples czy czegoś w tym stylu :)
Tytuł: Bibilioteka allegro
Wiadomość wysłana przez: sam_on w 2007-09-23, 22:55:50
Ok, dzięki za pomoc :)


---- Ten wątek został podzielony ----
Wszystkie oddzielone posty znajdują się tutaj (http://forum.linux.pl/viewtopic.php?id=19549).
(Podziału dokonał użytkownik pkraszewski)