C/C++ Projekte(OSS) unter Windows übersetzen

darktrym

Fahnenträger
Mich würde mal interessieren ob sich das irgendwer antut und mir bei den grundlegenden Konfiguration helfen kann. Mein Problem egal ob nun VS oder MinGW mit keinen gehts vernünftig solche Projekte zu bauen. Ich arbeite hier auf Windows 7 (64Bit)

C:\programmieren\projekte\sms_sdl\sms_sdl-0.9.4a-r7.1\sdl>make
gcc -c -I. -I.. -I../cpu -I../sound -IC:\MinGW\include -DLSB_FIRST -DX86_ASM ma
in.c -o main.o
gcc -c -I. -I.. -I../cpu -I../sound -IC:\MinGW\include -DLSB_FIRST -DX86_ASM sa
ves.c -o saves.o
gcc -c -I. -I.. -I../cpu -I../sound -IC:\MinGW\include -DLSB_FIRST -DX86_ASM sd
lsms.c -o sdlsms.o
gcc -c -I. -I.. -I../cpu -I../sound -IC:\MinGW\include -DLSB_FIRST -DX86_ASM fi
lters.c -o filters.o
gcc -c -I. -I.. -I../cpu -I../sound -IC:\MinGW\include -DLSB_FIRST -DX86_ASM ..
/render.c -o ../render.o
gcc -c -I. -I.. -I../cpu -I../sound -IC:\MinGW\include -DLSB_FIRST -DX86_ASM ..
/sms.c -o ../sms.o
gcc -c -I. -I.. -I../cpu -I../sound -IC:\MinGW\include -DLSB_FIRST -DX86_ASM ..
/system.c -o ../system.o
gcc -c -I. -I.. -I../cpu -I../sound -IC:\MinGW\include -DLSB_FIRST -DX86_ASM ..
/vdp.c -o ../vdp.o
gcc -c -I. -I.. -I../cpu -I../sound -IC:\MinGW\include -DLSB_FIRST -DX86_ASM ..
/cpu/z80.c -o ../cpu/z80.o
gcc -c -I. -I.. -I../cpu -I../sound -IC:\MinGW\include -DLSB_FIRST -DX86_ASM ..
/sound/emu2413.c -o ../sound/emu2413.o
gcc -c -I. -I.. -I../cpu -I../sound -IC:\MinGW\include -DLSB_FIRST -DX86_ASM ..
/sound/sn76496.c -o ../sound/sn76496.o
gcc main.o saves.o sdlsms.o filters.o ../render.o ../sms.o ../system.o ../vdp.o
../cpu/z80.o ../sound/emu2413.o ../sound/sn76496.o -LC:\MinGW\lib -o sms_sdl
sdlsms.o:sdlsms.c:(.text+0x41): undefined reference to `SDL_FillRect'
sdlsms.o:sdlsms.c:(.text+0xd4): undefined reference to `SDL_UpperBlit'
sdlsms.o:sdlsms.c:(.text+0x154): undefined reference to `SDL_UpperBlit'
sdlsms.o:sdlsms.c:(.text+0x178): undefined reference to `SDL_UpperBlit'
sdlsms.o:sdlsms.c:(.text+0x1a3): undefined reference to `SDL_UpdateRect'
sdlsms.o:sdlsms.c:(.text+0x210): undefined reference to `SDL_LockSurface'
sdlsms.o:sdlsms.c:(.text+0x226): undefined reference to `SDL_RWFromFile'
sdlsms.o:sdlsms.c:(.text+0x240): undefined reference to `SDL_SaveBMP_RW'
sdlsms.o:sdlsms.c:(.text+0x250): undefined reference to `SDL_UnlockSurface'
sdlsms.o:sdlsms.c:(.text+0x2ff): undefined reference to `SDL_InitSubSystem'
sdlsms.o:sdlsms.c:(.text+0x308): undefined reference to `SDL_GetError'
sdlsms.o:sdlsms.c:(.text+0x366): undefined reference to `SDL_CreateRGBSurface'
sdlsms.o:sdlsms.c:(.text+0x379): undefined reference to `SDL_GetError'
sdlsms.o:sdlsms.c:(.text+0x3f7): undefined reference to `SDL_CreateRGBSurface'
sdlsms.o:sdlsms.c:(.text+0x429): undefined reference to `SDL_SetVideoMode'
sdlsms.o:sdlsms.c:(.text+0x43c): undefined reference to `SDL_GetError'
sdlsms.o:sdlsms.c:(.text+0x473): undefined reference to `SDL_ShowCursor'
sdlsms.o:sdlsms.c:(.text+0x487): undefined reference to `SDL_WM_SetCaption'
sdlsms.o:sdlsms.c:(.text+0x4b2): undefined reference to `SDL_LockSurface'
sdlsms.o:sdlsms.c:(.text+0x4bf): undefined reference to `SDL_LockSurface'
sdlsms.o:sdlsms.c:(.text+0x53f): undefined reference to `SDL_UnlockSurface'
sdlsms.o:sdlsms.c:(.text+0x54c): undefined reference to `SDL_UnlockSurface'
sdlsms.o:sdlsms.c:(.text+0x60c): undefined reference to `SDL_FreeSurface'
sdlsms.o:sdlsms.c:(.text+0x622): undefined reference to `SDL_FreeSurface'
sdlsms.o:sdlsms.c:(.text+0x638): undefined reference to `SDL_FreeSurface'
sdlsms.o:sdlsms.c:(.text+0x702): undefined reference to `SDL_Init'
sdlsms.o:sdlsms.c:(.text+0x70b): undefined reference to `SDL_GetError'
sdlsms.o:sdlsms.c:(.text+0x755): undefined reference to `SDL_OpenAudio'
sdlsms.o:sdlsms.c:(.text+0x75f): undefined reference to `SDL_GetError'
sdlsms.o:sdlsms.c:(.text+0x80e): undefined reference to `SDL_LockAudio'
sdlsms.o:sdlsms.c:(.text+0x882): undefined reference to `SDL_UnlockAudio'
sdlsms.o:sdlsms.c:(.text+0x896): undefined reference to `SDL_PauseAudio'
sdlsms.o:sdlsms.c:(.text+0x89b): undefined reference to `SDL_CloseAudio'
sdlsms.o:sdlsms.c:(.text+0x8b1): undefined reference to `SDL_DestroySemaphore'
sdlsms.o:sdlsms.c:(.text+0x92a): undefined reference to `SDL_EnableKeyRepeat'
sdlsms.o:sdlsms.c:(.text+0x9e2): undefined reference to `SDL_FillRect'
sdlsms.o:sdlsms.c:(.text+0xcf2): undefined reference to `SDL_InitSubSystem'
sdlsms.o:sdlsms.c:(.text+0xcfb): undefined reference to `SDL_GetError'
sdlsms.o:sdlsms.c:(.text+0xd68): undefined reference to `SDL_JoystickOpen'
sdlsms.o:sdlsms.c:(.text+0xd83): undefined reference to `SDL_JoystickNumButtons'

sdlsms.o:sdlsms.c:(.text+0xd92): undefined reference to `SDL_JoystickNumAxes'
sdlsms.o:sdlsms.c:(.text+0xda1): undefined reference to `SDL_JoystickName'
sdlsms.o:sdlsms.c:(.text+0xdee): undefined reference to `SDL_JoystickEventState'

sdlsms.o:sdlsms.c:(.text+0xdfa): undefined reference to `SDL_GetError'
sdlsms.o:sdlsms.c:(.text+0x1105): undefined reference to `SDL_SemPost'
sdlsms.o:sdlsms.c:(.text+0x111c): undefined reference to `SDL_InitSubSystem'
sdlsms.o:sdlsms.c:(.text+0x1125): undefined reference to `SDL_GetError'
sdlsms.o:sdlsms.c:(.text+0x1141): undefined reference to `SDL_GetTicks'
sdlsms.o:sdlsms.c:(.text+0x1164): undefined reference to `SDL_CreateSemaphore'
sdlsms.o:sdlsms.c:(.text+0x117b): undefined reference to `SDL_GetTicks'
sdlsms.o:sdlsms.c:(.text+0x127d): undefined reference to `SDL_Init'
sdlsms.o:sdlsms.c:(.text+0x1286): undefined reference to `SDL_GetError'
sdlsms.o:sdlsms.c:(.text+0x13b2): undefined reference to `SDL_LockSurface'
sdlsms.o:sdlsms.c:(.text+0x1485): undefined reference to `SDL_UnlockSurface'
sdlsms.o:sdlsms.c:(.text+0x14c6): undefined reference to `SDL_PauseAudio'
sdlsms.o:sdlsms.c:(.text+0x14e3): undefined reference to `SDL_SetTimer'
sdlsms.o:sdlsms.c:(.text+0x14f8): undefined reference to `SDL_PollEvent'
sdlsms.o:sdlsms.c:(.text+0x15b4): undefined reference to `SDL_SemWait'
sdlsms.o:sdlsms.c:(.text+0x1612): undefined reference to `SDL_Quit'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: sdlsms.o:
bad reloc address 0x0 in section `.data'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link
failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
make: *** [sms_sdl] Error 1

SDL hab ich gemäß Anleitung eingerichtet. Jetzt frag ich mich findet er die Lib nicht weil nicht da, weil sie anderes kodiert ist als erwartet oder ist schlicht mingw broken.
 
Generell ist es sehr schmerzvoll beliebige Anwendungen unter Windows bauen zu können. Das hat mehrere Gründe. Windows ist doch sehr unterschiedlich zu unixoiden Plattformen und MinGW verdeckt das leider nur unzureichend. Viele Build-Systeme funktionieren nur so lala unter Windows, selbst die nach eigener Propaganda sehr kompatiblen Tools machen gern mal interessante Probleme. Ich habe irgendwann kapituliert und biete für meinen Quake II Client inzwischen ein fertig erstelltes Build-Env an, was sich Frickler nur noch auspacken müssen: http://deponie.yamagi.org/quake2/windows/build/ Das aber nur am Rande, denn es wird dir wahrscheinlich nicht helfen.

Dein Code baut soweit durch, er findet aber beim Linken die libSDL nicht. Das hat im Allgemeinen eine drei Ursachen:
- Die Lib ist nicht da.
- Das Build-System hat "vergessen" die Lib ins Linkerkommando einzubauen. Das ist bei dir der Fall. Entweder hat es die Lib nicht gefunden, sdl-config hat versagt oder es ist einfach kaputt.
- Die Lib ist an der falschen Stelle im Link-Kommando.
Ich denke, mit ein wenig rumstochern im Buildsystem müsstest du das gebaut bekommen. Zur Not halt das Linkerkommando kopieren, manuell anpassen und ausführen. Nicht schön, aber tut meistens.
 
Mein Problem, ich stochere seit gut zwei Tagen und sehe kein Land/Fortschritt. Bei VS bekommt man kryp. Fehlercodes, die man wenigstens googeln kann, damit funktioniert aber nicht das Binary! Dazu stellt die Konfiguration einen nicht zu unterschätzenden Faktor dar!
Bei MinGW bekomme ich stattdessen Meldungen, die wohl nur den Compilerhersteller nutzen, WinMain@16 ich grüße dich. Ich kann mich jedenfalls nicht erinnern schon mal Interna über den Einstiegspunkt (von Windows Binaries) informieren zu müssen damit's klappt.
Als Programmierer will ich eigentlich nur Code zusammenführen und nicht die Magier von Compilertechnik eintauchen. Bspw. braucht VS lib Files, der MinGW erwartet seine Linkeroptionen in der richtigen Reihenfolge als auch die Position ist entscheidend.

rm -f main.o saves.o sdlsms.o filters.o ../render.o ../sms.o ../system.o ../vdp.
o ../cpu/z80.o ../sound/emu2413.o ../sound/sn76496.o sms_sdl
gcc -c -I. -I.. -I../cpu -I../sound -DLSB_FIRST -DX86_ASM main.c -o main.o
gcc -c -I. -I.. -I../cpu -I../sound -DLSB_FIRST -DX86_ASM saves.c -o saves.o
gcc -c -I. -I.. -I../cpu -I../sound -DLSB_FIRST -DX86_ASM sdlsms.c -o sdlsms.o

gcc -c -I. -I.. -I../cpu -I../sound -DLSB_FIRST -DX86_ASM filters.c -o filters
.o
gcc -c -I. -I.. -I../cpu -I../sound -DLSB_FIRST -DX86_ASM ../render.c -o ../re
nder.o
gcc -c -I. -I.. -I../cpu -I../sound -DLSB_FIRST -DX86_ASM ../sms.c -o ../sms.o

gcc -c -I. -I.. -I../cpu -I../sound -DLSB_FIRST -DX86_ASM ../system.c -o ../sy
stem.o
gcc -c -I. -I.. -I../cpu -I../sound -DLSB_FIRST -DX86_ASM ../vdp.c -o ../vdp.o

gcc -c -I. -I.. -I../cpu -I../sound -DLSB_FIRST -DX86_ASM ../cpu/z80.c -o ../c
pu/z80.o
gcc -c -I. -I.. -I../cpu -I../sound -DLSB_FIRST -DX86_ASM ../sound/emu2413.c -
o ../sound/emu2413.o
gcc -c -I. -I.. -I../cpu -I../sound -DLSB_FIRST -DX86_ASM ../sound/sn76496.c -
o ../sound/sn76496.o
gcc main.o saves.o sdlsms.o filters.o ../render.o ../sms.o ../system.o ../vdp.o
../cpu/z80.o ../sound/emu2413.o ../sound/sn76496.o -LC:\MinGW\lib -lSDL -lmingw
32 -lSDLmain -o sms_sdl
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../libSDLmain.a(SDL_win32_main.o): I
n function `redirect_output':
/Users/slouken/release/SDL/SDL-1.2.15/./src/main/win32/SDL_win32_main.c:219: und
efined reference to `SDL_strlcpy'
/Users/slouken/release/SDL/SDL-1.2.15/./src/main/win32/SDL_win32_main.c:220: und
efined reference to `SDL_strlcat'
/Users/slouken/release/SDL/SDL-1.2.15/./src/main/win32/SDL_win32_main.c:243: und
efined reference to `SDL_strlcpy'
/Users/slouken/release/SDL/SDL-1.2.15/./src/main/win32/SDL_win32_main.c:244: und
efined reference to `SDL_strlcat'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../libSDLmain.a(SDL_win32_main.o): I
n function `console_main':
/Users/slouken/release/SDL/SDL-1.2.15/./src/main/win32/SDL_win32_main.c:296: und
efined reference to `SDL_strlcpy'
/Users/slouken/release/SDL/SDL-1.2.15/./src/main/win32/SDL_win32_main.c:312: und
efined reference to `SDL_SetModuleHandle'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../libSDLmain.a(SDL_win32_main.o): I
n function `WinMain@16':
/Users/slouken/release/SDL/SDL-1.2.15/./src/main/win32/SDL_win32_main.c:354: und
efined reference to `SDL_getenv'
/Users/slouken/release/SDL/SDL-1.2.15/./src/main/win32/SDL_win32_main.c:386: und
efined reference to `SDL_strlcpy'
collect2.exe: error: ld returned 1 exit status
make: *** [sms_sdl] Error 1

C:\programmieren\projekte\sms_sdl\sms_sdl-0.9.4a-r7.1\sdl>

So macht das Entwickeln keinen Spaß.
 
Das hilft Dir erstmal nicht...ich habe vor kurzem nach einem Framework gesucht, mit dem man leicht Spiele
in C++ für Windows und Linux programmieren kann. Ich habe mir dabei auch SDL kurz angeguckt und mich
dann aber für SFML entschieden.
Das ist ganz schnell eingerichtet sowohl unter Linux wie Windows. Habe auch nen fertiges Template für Visual Studio Express 2013 gefunden.
Wenn Du interesse an SFML hast kurze PM an mich.

Viel Erfolg
 
MinGW ist nur ein Subset einer POSIX-Plattform. Und solange du keine kommerziellen Sachen entwickelst, würde ich eher auf Cygwin gehen. Da hast du alles, was du von einem POSIX-System erwarten würdest. Natürlich gehen alle Syscalls durch die cygwin1.dll, aber wie gesagt: solange du keine kommerziellen Sachen entwickelst, dürfte es kein Problem für dich sein.
 
Zurück
Oben