gcc ne compile pas SDL Programme C (undefined reference to SDL fonctions)
J'ai récemment déménagé à linux et je vais avoir un problème avec la compilation de SDL programmes C avec gcc.
La commande que j'utilise:
gcc `sdl-config --cflags --libs` -o main main.c
Même en séparant sdl-config drapeaux:
gcc `sdl-config --cflags` -c main.c
gcc `sdl-config --libs` -o main main.o
J'obtiens le même message d'erreur:
/tmp/ccHYyjKd.o: In function `main':
main.c:(.text+0xe): undefined reference to `SDL_SetMainReady'
main.c:(.text+0x18): undefined reference to `SDL_Init'
main.c:(.text+0x31): undefined reference to `SDL_SetVideoMode'
main.c:(.text+0x54): undefined reference to `SDL_MapRGB'
main.c:(.text+0x6b): undefined reference to `SDL_FillRect'
main.c:(.text+0x77): undefined reference to `SDL_Flip'
main.c:(.text+0x83): undefined reference to `SDL_WaitEvent'
main.c:(.text+0x90): undefined reference to `SDL_Quit'
collect2: error: ld returned 1 exit status
Mon programme très simple:
#include <stdio.h>
#include <stdlib.h>
#define SDL_MAIN_HANDLED
#include <SDL/SDL.h>
int main()
{
//SDL Initialize
SDL_SetMainReady();
SDL_Init(SDL_INIT_VIDEO);
//Screen Initialize
SDL_Surface *screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);
Uint32 screenColor = SDL_MapRGB(screen->format, 255, 255, 255);
SDL_FillRect(screen, NULL, screenColor);
SDL_Flip(screen);
//Main Program Loop
SDL_Event event;
do
{
SDL_WaitEvent(&event);
} while (event.type != SDL_QUIT);
//SDL Quit
SDL_Quit();
return 0;
}
OriginalL'auteur rullof | 2013-12-17
Vous devez vous connecter pour publier un commentaire.
Ordre des arguments à
gcc
compte beaucoup. Remplaceravec
Mieux encore, d'apprendre comment utiliser GNU make et l'utilisation d'un
Makefile
inspiré par cette réponse...Aussi, passent toujours
-Wall -g
àgcc
jusqu'à ce que votre programme est sans bug (alors utiliser-Wall -O2
)OriginalL'auteur Basile Starynkevitch
Ajouter
-lSDL
avec gcc compiler commande. Cela va ajouter de la librairie sdl. Installer sdl développement paquet avant de compiler.EDIT:
ou
/usr/bin/ld: cannot find -lsdl
Avez-vous installé la sdl dev paquet? Quel système d'exploitation utilisez-vous?
Oui je l'ai fait. Comment puis-je vérifier si elle a été correctement installée?
Quel système d'exploitation utilisez-vous? Si elle ubuntu vous pouvez le vérifier plus simple de logiciel de centre.
changement
lsdl
àlSDL
OriginalL'auteur sujin
Je Vois ce à partir de /usr/include/SDL2/SDL_main.h
/*
* Ceci est appelé par le réel SDL fonction principale de laisser le reste de la
* bibliothèque de savoir que l'initialisation a été fait correctement.
*
* L'appel de cette vous-même sans savoir ce que vous êtes en train de faire peut causer des
* accidents et difficile à diagnostiquer des problèmes avec votre application.
*/
extern DECLSPEC vide SDL_SetMainReady(void);
Également vérifier:
nm /usr/lib/i386-linux-gnu/libSDL.a | grep SDL_SetMainReady
Ce n'est pas la solution, mais vous permettra de vous concentrer sur le vrai problème, je pense qu'il n'est pas le processus de compilation.
OriginalL'auteur Alvaro Denis Acosta
Merci beaucoup pour les conseils ! Cela m'a aidé à résoudre un vieux mystère sur la SDL symboles jamais trouvé sous Linux 🙂 Comme wroten dans les commentaires, la commande de gcc ligne est essentielle. Le makefile n'a pas été bien écrit et c'était la cause de la rupture que vous avez mentionné.
Que sommaire, utilisation : gcc ( drapeaux ) -o nom ( inclure et options de liaison)
Dernière mais pas moins, sous x86_64, utilisez gdb64, au lieu de gdb ( a la prochaine headhache 😉
À titre d'exemple, un petit Makefile que j'ai écrit moi-même (ok, pas très bon, mais fonctionne)
OriginalL'auteur ericb