Nowe posty

Autor Wątek: Kompilacja z biblioteką SDL  (Przeczytany 3661 razy)

KamilJ

  • Gość
Kompilacja z biblioteką SDL
« dnia: 2012-12-18, 10:57:55 »
Wczoraj po raz pierwszy zainstalowałem sobie linuxa (wybrałem najnowszą stabilną wersję openSUSE). Udało mi się zainstalować kompilator do C/C++, ale przy próbie kompilacji programu wykorzystującego SDL otrzymałem taki błąd:

kamil@linux-rcae:~/Pobrane/PacManSzablon> make -f Makefile.linux
g++ -O2 -I./sdl/include -L. -o main main.cpp -lm -lSDL -lpthread -ldl
In file included from /usr/include/stdio.h:34:0,
                 from main.cpp:10:
/usr/lib64/gcc/x86_64-suse-linux/4.7/include/stddef.h:213:23: error: conflicting declaration ‘typedef long unsigned int size_t’
In file included from ./sdl/include/SDL_config.h:42:0,
                 from ./sdl/include/SDL_stdinc.h:28,
                 from ./sdl/include/SDL_main.h:26,
                 from ./sdl/include/SDL.h:28,
                 from main.cpp:6:
./sdl/include/SDL_config_minimal.h:38:22: error: ‘size_t’ has a previous declaration as ‘typedef unsigned int size_t’
make: *** [main] Błąd 1
U koleżanki z jakąś dystrybucją Fedory ten sam kod z tą samą biblioteką zadziałał. Zmieniłem typ w pliku SDL_config_minimal.h i otrzymałem kolejny błąd:

kamil@linux-rcae:~/Pobrane/PacManSzablon> make -f Makefile.linux
g++ -O2 -I./sdl/include -L. -o main main.cpp -lm -lSDL -lpthread -ldl
/usr/lib64/gcc/x86_64-suse-linux/4.7/../../../../x86_64-suse-linux/bin/ld: skipping incompatible ./libSDL.a when searching for -lSDL
/usr/lib64/gcc/x86_64-suse-linux/4.7/../../../../x86_64-suse-linux/bin/ld: cannot find -lSDL
collect2: error: ld returned 1 exit status
make: *** [main] Błąd 1
Ktoś mi zasugerował, że moje problemy mogą być związane z tym, że mam 64-bitowego linuksa i żeby poszukać "cross compiling". Znalazłem informację, że wystarczy użyć configure z parametrem --target=x86. Dało to taki efekt:

kamil@linux-rcae:~/Pobrane/PacManSzablon> configure --target=x86
If 'configure' is not a typo you can use command-not-found to lookup the package that contains it, like this:
    cnf configure
Polecenie cnf też nic nie znalazło. Zarówno z SDL jak i z (zwłaszcza) Linuxem znam się dość kiepsko. Co robię nie tak?

Offline vanhelzing

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 314
    • Zobacz profil
Kompilacja z biblioteką SDL
« Odpowiedź #1 dnia: 2012-12-18, 12:23:31 »
Cytuj
/usr/lib64/gcc/x86_64-suse-linux/4.7/../../../../x86_64-suse-linux/bin/ld: cannot find -lSDL
Nie może znaleźć libSDL. Sprawdź, czy masz zainstalowany w systemie i ewentualnie zainstaluj odpowiedni pakiet z bibliotekami SDL.

Online Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3067
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Kompilacja z biblioteką SDL
« Odpowiedź #2 dnia: 2012-12-18, 15:26:15 »
Dodam, z bibliotekami DEVELOPERSKIMI (-devel) a nie użytkowymi.

Zrobiłem mały research.... Nowe OpenSUSE nie ma sdl-devel o_O . WTF? Ostatnie posiadające ten pakiet to 11.1... Ale że o tso chodzi????
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

KamilJ

  • Gość
Kompilacja z biblioteką SDL
« Odpowiedź #3 dnia: 2012-12-18, 16:41:12 »
http://www.libsdl.org/download-1.2.php - pobrałem stąd zarówno runtime jak i development. Po tym zabiegu program się skompilował:

kamil@linux-rcae:~/Pobrane/PacManSzablon> make -f Makefile.linux
g++ -O2 -I./sdl/include -L. -o main main.cpp -lm -lSDL -lpthread -ldl
/usr/lib64/gcc/x86_64-suse-linux/4.7/../../../../x86_64-suse-linux/bin/ld: skipping incompatible ./libSDL.a when searching for -lSDL
Za pomoc z ruszeniem z kompilacją dziękuję. Ale jest problem z odpaleniem skompilowanego programu (plik o nazwie main):

kamil@linux-rcae:~/Pobrane/PacManSzablon> ./main
Naruszenie ochrony pamięci
Przy próbie otwarcia za pomocą kliknięcia na ikonce nie dzieje się kompletnie nic. Gdzieś w Google wyczytałem, żeby spróbować wpisać "su" - wpisałem, podałem hasło i rezultat w terminalu jest ten sam - Naruszenie ochrony pamięci.

chmooreck

  • Gość
Kompilacja z biblioteką SDL
« Odpowiedź #4 dnia: 2012-12-18, 18:59:53 »
sprawdź gdzie leci, na przykład za pomocą gdb
być może po prostu masz błąd w programie