web-dev-qa-db-fra.com

Impossible de créer un lien vers des fonctions SDL2 à l'aide de Mingw

Je suis relativement nouveau à la programmation et j'ai décidé de donner un essai SDL, mais je suis un peu coincé. Je n'ai pas été en mesure de construire le projet dans CodeBlocks et que je reçois une "référence non définie" à toutes les fonctions SDL. J'ai vu beaucoup de questions similaires ici, mais aucune des solutions ne semble aider. J'ai déjà ajouté le\Inclure\sdl2 et les dossiers\Lib pour rechercher des annuaires, j'ai ajouté SDL2Main et SDL2 à des bibliothèques de liaison dans les options de liaison, j'ai même ajouté -Mwindows à d'autres options de liaison. En outre, j'ai essayé également de relier la version 64 bits, mais les choses ont encore pire.

Voici mon code source, à peu près copié tout de suite du tutoriel que j'ai commencé:

#include <SDL.h>
SDL_Window* g_pWindow = 0;
SDL_Renderer* g_pRenderer = 0;
int main(int argc, char* args[])
    {
        // initialize SDL
    if(SDL_Init(SDL_INIT_EVERYTHING) >= 0)
    {
    // if succeeded create our window
        g_pWindow = SDL_CreateWindow("Chapter 1: Setting up SDL",
        SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
        640, 480,
        SDL_WINDOW_SHOWN);
        // if the window creation succeeded create our renderer
        if(g_pWindow != 0)
        {
            g_pRenderer = SDL_CreateRenderer(g_pWindow, -1, 0);
        }
    }
    else
    {
        return 1; // sdl could not initialize
    }
    // everything succeeded lets draw the window
    // set to black // This function expects Red, Green, Blue and
    // Alpha as color values
    SDL_SetRenderDrawColor(g_pRenderer, 0, 0, 0, 255);
    // clear the window to black
    SDL_RenderClear(g_pRenderer);
    // show the window
    SDL_RenderPresent(g_pRenderer);
    // set a delay before quitting
    SDL_Delay(5000);
    // clean up SDL
    SDL_Quit();
        return 0;
}

Et voici le journal de construction:

mingw32-g++.exe -LC:\dev\sdl\SDL2-2.0.1\x86_64-w64-mingw32\lib  -o bin\Debug\GeometryProject.exe obj\Debug\main.o   -mwindows  C:\MinGW\lib\libmingw32.a C:\dev\sdl\SDL2-2.0.1\x86_64-w64-mingw32\lib\libSDL2main.a C:\dev\sdl\SDL2-2.0.1\x86_64-w64-mingw32\lib\libSDL2.a 
obj\Debug\main.o: In function `SDL_main':
C:/Users/Kris948/Desktop/ProjectsUni/GeometryProject/main.cpp:7: undefined reference to `SDL_Init'
C:/Users/Kris948/Desktop/ProjectsUni/GeometryProject/main.cpp:13: undefined reference to `SDL_CreateWindow'
C:/Users/Kris948/Desktop/ProjectsUni/GeometryProject/main.cpp:17: undefined reference to `SDL_CreateRenderer'
C:/Users/Kris948/Desktop/ProjectsUni/GeometryProject/main.cpp:27: undefined reference to `SDL_SetRenderDrawColor'
C:/Users/Kris948/Desktop/ProjectsUni/GeometryProject/main.cpp:29: undefined reference to `SDL_RenderClear'
C:/Users/Kris948/Desktop/ProjectsUni/GeometryProject/main.cpp:31: undefined reference to `SDL_RenderPresent'
C:/Users/Kris948/Desktop/ProjectsUni/GeometryProject/main.cpp:33: undefined reference to `SDL_Delay'
C:/Users/Kris948/Desktop/ProjectsUni/GeometryProject/main.cpp:35: undefined reference to `SDL_Quit'
C:\MinGW\lib\libmingw32.a(main.o):main.c:(.text.startup+0xa7): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)
9 errors, 0 warnings (0 minutes, 0 seconds)

Y a-t-il autre chose que je pourrais essayer? J'aimerais vraiment avoir cette course et j'apprécierais toute aide.

12
user3052572

Un problème possible est que votre lien avec une bibliothèque SDL2 pour une architecture différente.

Vous devriez utiliser

SDL2-2.0.1\i686-w64-mingw32

à la place de

SDL2-2.0.1\x86_64-w64-mingw32

Aussi, après avoir défini le chemin de recherche de la bibliothèque, utilisez cette notation pour créer un lien vers les bibliothèques.

-lmingw32 -lSDL2main -lSDL2

C'est beaucoup plus facile à lire.

12
Xonar

Au lieu d'ajouter un chemin complet, essayez -LC:/PATH_TO_SDL -lSDL2main -lSDL2 (ou une seule option SDL) à la place; le lib et .a est déjà connu sous la liaison.

(Je ne sais pas si vous devez utiliser soit / ou \)

Puisque vous utilisez c ++, remplacez votre inclusion avec ceci:

extern "C"
{
    #include "SDL.h"
}

Cela indique au compilateur de traiter SDL comme C - et non C++ - Code.

Voir aussi: SDL2 ne reliera pas correctement

2
ollo