2017-01-21 2 views
3

Donc, je suivais un simple tutoriel en C++ avec SDL pour linux mais je rencontre quelques erreurs sur mon chemin.Erreurs Geany, g ++ et SDL en compilation

tout d'abord j'utilise Geany et j'ai téléchargé les libs SDL2 correspondants, voici la chose:

dans mon dossier de projet il y a un fichier main.cxx, que j'ouvre avec geany comme je l'ai mentionné avant :

J'inclus cette bibliothèque:

#include <iostream> 
#include <SDL2/SDL.h> 
#include <SDL2/SDL_image.h> 
#include <SDL2/SDL_mixer.h> 

premier i rencontré une erreur pelculiar, la compilation exécute, mais avec succès quand il s'agit de construire j'eu cette erreur:

main.cxx: undefined reference to `SDL_Init'

Après avoir cherché un peu j'ai découvert que je devais ajouter la balise -lSDL à mes options de construction de geany afin qu'ils finissent par être somethinf comme ceci:

Compile:

g++ -Wall -c -lSDL "%f" 

Construire:

g++ -Wall -o -lSDL "%e" "%f" 

Mais il y a un problème, maintenant, quand j'exécutez la commande build i get a:

Pourquoi ai-je cette erreur, ai-je inclus une mauvaise bibliothèque ou g ++ a des problèmes avec les fichiers .cxx? J'ai déjà essayé de convertir entre .cxx et .cpp.

Merci d'avance.

+1

Je pense que vous liez la mauvaise version de SDL, dans vos en-têtes, vous incluez SDL2, mais uniquement avec SDL. Essayez '-lSDL2'. – Rakete1111

+0

Modifié l'ordre de compilation à 'g ++ -Wall -c -lSDL2"% f "' et le build à 'g ++ -Wall -o -lSDL2"% e ""% f "', ne fait aucune différence, je reçois toujours le Erreur "pas de tel fichier". –

+1

essayez de lier 'SDLmain' – Rakete1111

Répondre

1
g++ -Wall -c -lSDL2 "%f" 

Il n'est absolument pas nécessaire de spécifier des bibliothèques pendant la phase de compilation. Enlever -lSDL.

g++ -Wall -o -lSDL2 "%e" "%f" 

Il invoque compilateur, implique de liaison (pas -c ou d'autres drapeaux spécifiques à l'opération), et définit le nom du fichier de sortie à -lSDL2. En d'autres termes, l'éditeur de liens générera le résultat binaire dans un fichier nommé -lSDL2 dans le répertoire de travail actuel. Puis, quand il s'agit de fichiers à lier, il va main, qui est censé être -o main, mais puisque vous avez brisé les drapeaux commande il est maintenant juste le nom de fichier ordinaire que l'éditeur de liens va essayer de lier dans binaire résultant. Il arrive que ce fichier n'existe pas.

Longue histoire courte, faites la bonne ligne de liaison - g++ -o "%e" %f -lSDL2 (les bibliothèques viennent en dernier, l'ordre de bibliothèque est également important).

+0

La dernière ligne que vous avez suggérée s'est débarrassée de la" aucune erreur de fichier "mais après avoir remplacé maintenant je reçois ces erreurs' g ++ -o "main" main.cpp -lSDL2 (en el directorio:/home/omar/proyectos/testingsdl) /tmp/ccrj38Jv.o: dans la fonction principale: main.cpp :(. text + 0xe9): referencia a 'IMG_LoadTexture 'sin definir main.cpp :(.text + 0x124): referencia un 'IMG_LoadTexture 'sin definir collect2: erreur: ld retourné 1 état de sortie Ha fallado la compilación.' Il s'agit fondamentalement d'une erreur de référence indéfinie. –

+0

'IMG_LoadTexture' appartient à' SDL2_image', pas 'SDL2', donc vos bibliothèques sont au moins' -lSDL2 -lSDL2_image' (encore une fois, l'ordre compte). – keltar

+0

A travaillé !, merci beaucoup: D –