web-dev-qa-db-fra.com

Impossible de compiler un programme qui utilise SDL après la mise à niveau vers 11.10 - référence non définie à SDL_Init

Je viens de mettre à niveau de 11.4 à 11.10 et au moins une chose semble brisée: mon programme C++ utilise SDL et OpenGL. J'ai été capable de le compiler et de l'exécuter correctement avant la mise à niveau. Maintenant, je reçois des erreurs de l'éditeur de liens, par exemple

undefined reference to `SDL_Init'

J'ai libsdl1.2debian et libsdl1.2-dev paquets installés, je crois que c'est tout ce dont j'ai besoin (mais je me trompe peut-être). Je compile le programme comme ceci:

gcc -I /usr/include/SDL -lSDL -o test test.cpp

Toute idée de ce qui peut causer cela?

6
adam

Ok, résolu. Apparemment, pour une raison mystérieuse, l'ordre des options de gcc est maintenant important. Alors quand je le fais:

gcc -I /usr/include/SDL -o test test.cpp -lSDL

(déplacé l'option -lSDL à la fin) tout fonctionne parfaitement. J'adorerais savoir pourquoi cela a soudainement d'importance, alors qu'avant, si, ce n'était pas le cas, mais pour l'instant, je suis heureux que tout fonctionne à nouveau.

16
adam

Pour Eclipse: J'ai le même problème, mais je résous.

  • Sélectionnez un projet
  • Projet> Propriétés
  • C/C++ Build> Paramètres - Paramètres des outils> Compilateur GCC C - Inclusion des chemins (-l)> "/ usr/include/SDL"
  • C/C++ Build> Paramètres - Paramètres d’outil> GCC C Linker - Bibliothèques (-l)> "SDL"
  • Appliquer

... puis construisez le projet et lancez ...

1
user46917

Un simple GNU Makefile pour un projet utilisant SDL:

CXXFLAGS:=(Shell pkg-config --cflags sdl2) $(CXXFLAGS)
LDLIBS:=$(Shell pkg-config --libs sdl2) $(LDLIBS)

all: test

Où un fichier test.cpp existe dans le même répertoire que le fichier Makefile.

(Notez que j'ai utilisé sdl2 au lieu de sdl, car SDL 1.2 est pratiquement mort maintenant.)

GNU make trouvera comme par magie la commande pour appeler g++.

0
Jonathan Baldwin

Dans mon cas, j'utilisais G ++ et cela ne fonctionnait pas, et le passage à GCC fonctionnait. J'écris en C cependant.

En utilisant Code :: Blocks, le drapeau de la bibliothèque est -lSDL2

0
Yan King Yin