Altes Problem ausgekramt: Linken unter Windows

darktrym

Fahnenträger
Mal wieder ein Build-Problem mit dem ich euch heute beglücken würde. Eines meiner Lieblingsspiele soll für Windows 10(64Bit) gebaut werden. Es benötigt curses, daher greif ich zu pdcurses. Verwendet dann GCC 5.1 in Form von TDM64. Die Übersetzung von pdcurses funktioniert auch, neben den Objektdateien, Tests wird auch pdcurses.a erzeugt.
Nun die Makefile angepasst, damit der Header und die Lib gefunden werden kann, natürlich über -I, -L -lpdcurses. Kompilieren tuts noch, aber beim linken kann er nicht -lpdcurses finden. Die Ausgabe sieht dann wie folgt aus:

Code:
mingw32-make
gcc -IC:\pdcurses -LC:\pdcurses\win32 -lpdcurses    -o enigma.exe main.o screen.o engine.o memory.o levelfile.o misc.o savefile.o
C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lpdcurses
collect2.exe: error: ld returned 1 exit status
Makefile:33: recipe for target 'enigma' failed
mingw32-make: *** [enigma] Error 1

Via Mingw und dem eingebauten ncurses funktioniert es genauso wenig, bin mir recht sicher, das ich es unter Windows 7 noch irgendwie bauen konnte. Jemand eine Idee? Komme hier ja nicht weiter, weil keine weiteren Infos geliefert werden, Pfade stimmen soweit.
 
Erst einmal die Idiotenfrage vorweg: Kann es sein, dass du versuchst eine 32-Bit Library in ein 64-Bit Programm zu linken?
 
Eigentlich nicht, weil der 64Bit Compiler sowohl die Bibliothek als auch das Programm übersetzt. Irgendwo in einem Forum wird noch die Variante genannt, man solle die Bibliothek unbenennen in libpdcurses.a. Dann findet er die Bibliothek kann aber die Referenzen in ihnen nicht auflösen.
Um das klarzustellen, ich möchte es für Windows übersetzen, nicht Cygwin!

Code:
C:\programmieren\projekte\enigma>mingw32-make
gcc -IC:/pdcurses -LC:/pdcurses/win32 -lpdcurses    -o enigma.exe main.o screen.o engine.o memory.o levelfile.o misc.o savefile.o
screen.o: In function `screen_init':
C:\programmieren\projekte\enigma/screen.c:90: undefined reference to `initscr'
C:\programmieren\projekte\enigma/screen.c:91: undefined reference to `noecho'
C:\programmieren\projekte\enigma/screen.c:92: undefined reference to `keypad'
C:\programmieren\projekte\enigma/screen.c:93: undefined reference to `move'
C:\programmieren\projekte\enigma/screen.c:94: undefined reference to `refresh'
C:\programmieren\projekte\enigma/screen.c:95: undefined reference to `has_colors'
C:\programmieren\projekte\enigma/screen.c:96: undefined reference to `start_color'
C:\programmieren\projekte\enigma/screen.c:98: undefined reference to `init_pair'
screen.o: In function `screen_prints':
C:\programmieren\projekte\enigma/screen.c:109: undefined reference to `wattrset'
C:\programmieren\projekte\enigma/screen.c:110: undefined reference to `wmove'
screen.o: In function `screen_printc':
C:\programmieren\projekte\enigma/screen.c:115: undefined reference to `wattrset'
C:\programmieren\projekte\enigma/screen.c:116: undefined reference to `wmove'
screen.o: In function `screen_level_display':
C:\programmieren\projekte\enigma/screen.c:148: undefined reference to `getmaxy'
C:\programmieren\projekte\enigma/screen.c:148: undefined reference to `getmaxx'
C:\programmieren\projekte\enigma/screen.c:150: undefined reference to `werase'
C:\programmieren\projekte\enigma/screen.c:222: undefined reference to `move'
C:\programmieren\projekte\enigma/screen.c:223: undefined reference to `refresh'
screen.o: In function `screen_level_getmove':
C:\programmieren\projekte\enigma/screen.c:234: undefined reference to `wgetch'
screen.o: In function `screen_movie_getmove':
C:\programmieren\projekte\enigma/screen.c:259: undefined reference to `wgetch'
screen.o: In function `screen_main_menu':
C:\programmieren\projekte\enigma/screen.c:299: undefined reference to `getmaxy'
C:\programmieren\projekte\enigma/screen.c:299: undefined reference to `getmaxx'
C:\programmieren\projekte\enigma/screen.c:301: undefined reference to `werase'
C:\programmieren\projekte\enigma/screen.c:346: undefined reference to `wattrset'
C:\programmieren\projekte\enigma/screen.c:396: undefined reference to `move'
C:\programmieren\projekte\enigma/screen.c:397: undefined reference to `refresh'
C:\programmieren\projekte\enigma/screen.c:398: undefined reference to `wgetch'
screen.o: In function `screen_saveslot_ask':
C:\programmieren\projekte\enigma/screen.c:435: undefined reference to `getmaxy'
C:\programmieren\projekte\enigma/screen.c:435: undefined reference to `getmaxx'
C:\programmieren\projekte\enigma/screen.c:465: undefined reference to `move'
C:\programmieren\projekte\enigma/screen.c:466: undefined reference to `refresh'
C:\programmieren\projekte\enigma/screen.c:467: undefined reference to `wgetch'
screen.o: In function `screen_ask_movefile':
C:\programmieren\projekte\enigma/screen.c:490: undefined reference to `getmaxy'
C:\programmieren\projekte\enigma/screen.c:490: undefined reference to `getmaxx'
C:\programmieren\projekte\enigma/screen.c:520: undefined reference to `move'
C:\programmieren\projekte\enigma/screen.c:521: undefined reference to `refresh'
C:\programmieren\projekte\enigma/screen.c:522: undefined reference to `wgetch'
screen.o: In function `screen_error_box':
C:\programmieren\projekte\enigma/screen.c:549: undefined reference to `getmaxy'
C:\programmieren\projekte\enigma/screen.c:549: undefined reference to `getmaxx'
C:\programmieren\projekte\enigma/screen.c:568: undefined reference to `move'
C:\programmieren\projekte\enigma/screen.c:569: undefined reference to `refresh'
screen.o: In function `screen_completed_game':
C:\programmieren\projekte\enigma/screen.c:576: undefined reference to `getmaxy'
C:\programmieren\projekte\enigma/screen.c:576: undefined reference to `getmaxx'
C:\programmieren\projekte\enigma/screen.c:578: undefined reference to `werase'
C:\programmieren\projekte\enigma/screen.c:589: undefined reference to `move'
C:\programmieren\projekte\enigma/screen.c:590: undefined reference to `refresh'
screen.o: In function `screen_finish':
C:\programmieren\projekte\enigma/screen.c:105: undefined reference to `endwin'
screen.o: In function `screen_prints':
C:\programmieren\projekte\enigma/screen.c:111: undefined reference to `waddstr'
screen.o: In function `screen_printc':
C:\programmieren\projekte\enigma/screen.c:117: undefined reference to `waddch'
screen.o: In function `screen_error_box':
C:\programmieren\projekte\enigma/screen.c:570: undefined reference to `wgetch'
screen.o: In function `screen_completed_game':
C:\programmieren\projekte\enigma/screen.c:591: undefined reference to `wgetch'
screen.o:screen.c:(.rdata$.refptr.stdscr[.refptr.stdscr]+0x0): undefined reference to `stdscr'
collect2.exe: error: ld returned 1 exit status
Makefile:33: recipe for target 'enigma' failed
mingw32-make: *** [enigma] Error 1
 
Gut, ich habs zurecht gehackt, keine Ahnung warum es läuft, genauso wie früher ;) Hab das Kompilieren des Spiels das alte Skript machen lassen und das pdcurses erweitert damit er mein Kram mitbenutzt, da scheinen die Pfade zu stimmen. Dann noch testing und save auskommentiert und es läuft.
Nur gut dass ich meine Brötchen nicht mit C und make verdiene.
 

Anhänge

  • enigma.zip
    117,4 KB · Aufrufe: 353
Zurück
Oben