Anzeige:
Ergebnis 1 bis 4 von 4

Thema: SDL MingW32 Cross-Compile Problem

  1. #1
    Registrierter Benutzer
    Registriert seit
    28.07.2003
    Ort
    Wipperfürth
    Beiträge
    12

    SDL MingW32 Cross-Compile Problem

    Hallo,

    ich versuche ein blödes einfaches SDL-Programm für Windows mit MingW32 unter Debian cross zu kompilieren, aber der Linker bringt mir folgende Fehler:

    Code:
    zwerg@bilbo:~/dev/test/win$ i586-mingw32msvc-g++ -I/home/zwerg/dev/SDL-1.2.9/include -L/home/zwerg/dev/SDL-1.2.9/lib -lSDLmain -lSDL win.cpp -o win.exe
    /tmp/ccq47szh.o:win.cpp:(.text+0x110): undefined reference to `_SDL_Init'
    /tmp/ccq47szh.o:win.cpp:(.text+0x122): undefined reference to `_SDL_GetError'
    /tmp/ccq47szh.o:win.cpp:(.text+0x156): undefined reference to `_SDL_Quit'
    /usr/lib/gcc/i586-mingw32msvc/3.4.2/../../../../i586-mingw32msvc/lib/libmingw32.a(main.o):: undefined reference to `_WinMain@16'
    collect2: ld returned 1 exit status
    zwerg@bilbo:~/dev/test/win$
    Das Programm sieht wiefolgt aus und kompiliert mit dem normalen g++ und den normalen Debian-Libs wunderbar:

    Code:
    #include <iostream>
    #include <SDL.h>
    
    int main()
    {
            if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
                    std::cout << "SDL fucked up! " << SDL_GetError();
                    exit(1);
            }
            atexit(SDL_Quit);
    }
    Das Verzeichnis /home/zwerg/dev/SDL-1.2.9/lib:

    Code:
    zwerg@bilbo:~/dev/test/win$ ls /home/zwerg/dev/SDL-1.2.9/lib/
    SDL.dll  SDL_net.dll  SDL_net.lib  libSDL.dll.a  libSDL.la  libSDLfoo.a  libSDLmain.a
    zwerg@bilbo:~/dev/test/win$
    Das Verzeichnis /home/zwerg/dev/SDL-1.2.9/include:

    Code:
    zwerg@bilbo:~/dev/test/win$ ls /home/zwerg/dev/SDL-1.2.9/include/
    SDL.h            SDL_copying.h  SDL_getenv.h    SDL_main.h   SDL_opengl.h  SDL_timer.h    close_code.h
    SDL_active.h     SDL_cpuinfo.h  SDL_joystick.h  SDL_mouse.h  SDL_quit.h    SDL_types.h
    SDL_audio.h      SDL_endian.h   SDL_keyboard.h  SDL_mutex.h  SDL_rwops.h   SDL_version.h
    SDL_byteorder.h  SDL_error.h    SDL_keysym.h    SDL_name.h   SDL_syswm.h   SDL_video.h
    SDL_cdrom.h      SDL_events.h   SDL_loadso.h    SDL_net.h    SDL_thread.h  begin_code.h
    zwerg@bilbo:~/dev/test/win$
    Weiß jemand vielleicht, warum der Linker die Funktionen in der DLL nicht findet?

    Danke, zwerg
    Never trust programmers who carry screwdrivers!

  2. #2
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Versuch mal anstatt "-lSDL" einfach "/pfad/zur/SDL.dll"

  3. #3
    Registrierter Benutzer
    Registriert seit
    28.07.2003
    Ort
    Wipperfürth
    Beiträge
    12
    Dank dir, aber ich bin (glaub ich) schon einen Schritt weiter. Ich habe dem Linker die Libs in ner anderen Reihenfolge gegeben und er scheint die zu finden. Nur findet er jetzt das Symbol _SDL_main nicht:

    Code:
    zwerg@bilbo:~/dev/test/win$ i586-mingw32msvc-g++ -L/usr/i586-mingw32msvc/lib -L/home/zwerg/dev/SDL-1.2.9/lib -o win.exe -lmingw32 -lSDLmain win.o -lSDL -mwindows
    /home/zwerg/dev/SDL-1.2.9/lib/libSDLmain.a(SDL_win32_main.o): In function `console_main':
    /home/hercules/public_cvs/SDL12/src/main/win32/SDL_win32_main.c:249: undefined reference to `_SDL_main'
    collect2: ld returned 1 exit status
    zwerg@bilbo:~/dev/test/win$
    Wenn ich -lmingw32 weg lasse, oder an eine andere Position setze, bekomm ich folgendes:

    Code:
    zwerg@bilbo:~/dev/test/win$ i586-mingw32msvc-g++ -L/usr/i586-mingw32msvc/lib -L/home/zwerg/dev/SDL-1.2.9/lib -o win.exe -lSDLmain win.o -lSDL -mwindows
    /usr/i586-mingw32msvc/lib/libmingw32.a(main.o):: undefined reference to `_WinMain@16'
    collect2: ld returned 1 exit status
    zwerg@bilbo:~/dev/test/win$
    Wen es interessiert, hier ist der Compileraufruf:

    Code:
    zwerg@bilbo:~/dev/test/win$ i586-mingw32msvc-g++ -c -I/home/zwerg/dev/SDL-1.2.9/include -o win.o win.cpp
    zwerg@bilbo:~/dev/test/win$
    Hat noch jemand ne Idee? Cross-kompilieren macht irgendwie keinen Spaß
    Never trust programmers who carry screwdrivers!

  4. #4
    Registrierter Benutzer
    Registriert seit
    28.07.2003
    Ort
    Wipperfürth
    Beiträge
    12
    Oh weh, oh weh...

    Natürlich muss die main nicht int main(), sondern int main(int argc, char *argv[]) heißen...

    Klappt also jetzt..!

    *schäm*
    Never trust programmers who carry screwdrivers!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •