Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Mit FreeBASIC erstellte Lib mit GCC nutzen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Cybermonkey342



Anmeldungsdatum: 21.02.2015
Beiträge: 16
Wohnort: Freiburg

BeitragVerfasst am: 05.04.2020, 13:10    Titel: Mit FreeBASIC erstellte Lib mit GCC nutzen Antworten mit Zitat

Hallo,

ich habe mein Pulsar2D-Framework als statische Lib kompiliert und möchte diese mit GCC nutzen.
In Linux funktioniert dies einwandfrei. Ich kompiliere meine einzelnen C-Programme als Object-Dateien und kann ganz einfach mit FBC alles zusammenfügen:

Code:

fbc pulsarbasic.o tinyfiledialogs.o my_basic.o -l pulsar2d -O 2


Probleme bereitet mir dasselbe unter Windows. Ich habe hier einmal denselben Ansatz wie unter Linux probiert:

Code:

fbc pulsarbasic.o tinyfiledialogs.o my_basic.o -l pulsar2d -l Comdlg32 -l Ole32 -O 2

Im Ergebnis erhalte ich folgende Fehler:
Zitat:

tinyfiledialogs.o:tinyfiledialogs.c:(.text+0x21b4): undefined reference to `SHBrowseForFolderW@4'
tinyfiledialogs.o:tinyfiledialogs.c:(.text+0x21d3): undefined reference to `SHGetPathFromIDListW@8'
tinyfiledialogs.o:tinyfiledialogs.c:(.text+0x2ebb): undefined reference to `SHBrowseForFolderA@4'
tinyfiledialogs.o:tinyfiledialogs.c:(.text+0x2ed9): undefined reference to `SHGetPathFromIDListA@8'
D:\FBC\lib\win32/libmingw32.a(lib32_libmingw32_a-crt0_c.o):crt0_c.c:(.text.startup+0x39): undefined reference to `WinMain@16'


Evtl. - so dachte ich - brauche ich die libSDLMain, habe also die mit angegeben. Ergebnis:

Zitat:

tinyfiledialogs.o:tinyfiledialogs.c:(.text+0x21b4): undefined reference to `SHBrowseForFolderW@4'
tinyfiledialogs.o:tinyfiledialogs.c:(.text+0x21d3): undefined reference to `SHGetPathFromIDListW@8'
tinyfiledialogs.o:tinyfiledialogs.c:(.text+0x2ebb): undefined reference to `SHBrowseForFolderA@4'
tinyfiledialogs.o:tinyfiledialogs.c:(.text+0x2ed9): undefined reference to `SHGetPathFromIDListA@8'
./libSDL2main.a(SDL_windows_main.o): In function `main_getcmdline':
/Users/valve/release/SDL/SDL2-2.0.12-source/foo-x86/../src/main/windows/SDL_windows_main.c:49: undefined reference to `_imp__CommandLineToArgvW@8'

Was noch verrückter ist, denn es gibt bei mir definitiv keinen User "Valve" ...

Also habe ich das Ganze mit GCC probiert, da sieht die Zeile ertwas länger aus:
Code:

gcc pulsarbasic.c my_basic.c tinyfiledialogs.c -o pulsarbasic.exe -s -O2 -lpulsar2d -L"D:\FBC\lib\win32" "D:\FBC\lib\win32\fbrt0.o" -lfbgfx -lfb -lm -Wl,--subsystem,windows -lmingw32 -lSDL2main -lSDL2 -lSDL2_mixer -lSDL2_image -lComdlg32 -lOle32


Im Ergebnis sind die Fehler etwas anders, aber bringt mich auch nicht weiter:
Zitat:

d:/TDM-GCC-32/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: d:/TDM-GCC-32/bin/../lib/gcc/mingw32/9.2.0/../../../crt2.o:(.text+0x1dc): undefined reference to `__cpu_features_init'
d:/TDM-GCC-32/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: d:/TDM-GCC-32/bin/../lib/gcc/mingw32/9.2.0/../../../crt2.o:(.text+0x1e1): undefined reference to `_CRT_fenv'
d:/TDM-GCC-32/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: d:/TDM-GCC-32/bin/../lib/gcc/mingw32/9.2.0/../../../crt2.o:(.text+0x1f3): undefined reference to `_CRT_fmode'
d:/TDM-GCC-32/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: d:/TDM-GCC-32/bin/../lib/gcc/mingw32/9.2.0/../../../crt2.o:(.text+0x260): undefined reference to `_CRT_fmode'
d:/TDM-GCC-32/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: d:/TDM-GCC-32/bin/../lib/gcc/mingw32/9.2.0/../../../crt2.o:(.text+0x274): undefined reference to `_CRT_fmode'
d:/TDM-GCC-32/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: d:/TDM-GCC-32/bin/../lib/gcc/mingw32/9.2.0/../../../crt2.o:(.text+0x2a4): undefined reference to `_CRT_glob'
d:/TDM-GCC-32/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: D:\FBC\lib\win32/libmingw32.a(lib32_libmingw32_a-crt0_c.o):crt0_c.c:(.text.startup+0x17): undefined reference to `__mingw_winmain_nShowCmd'
d:/TDM-GCC-32/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: D:\FBC\lib\win32/libmingw32.a(lib32_libmingw32_a-crt0_c.o):crt0_c.c:(.text.startup+0x28): undefined reference to `__mingw_winmain_lpCmdLine'
d:/TDM-GCC-32/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: D:\FBC\lib\win32/libmingw32.a(lib32_libmingw32_a-crt0_c.o):crt0_c.c:(.text.startup+0x31): undefined reference to `__mingw_winmain_hInstance'
collect2.exe: error: ld returned 1 exit status


Hat einer eine Idee, was ich hier übersehe? Ich nutze sowohl GCC als auch FBC in 32 Bit (inklusive aller Libs)
_________________
Mit besten Grüßen,
Cybermonkey
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4597
Wohnort: ~/

BeitragVerfasst am: 05.04.2020, 18:15    Titel: Antworten mit Zitat

Für mich sieht das auf den ersten Blick so aus, als ob bei den Bibliotheken Header und Lib nicht zusammenpassen (also insb. bei tinyfiledialogs). Besser kenne ich mich in dieser Materie allerdings leider nicht aus.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Cybermonkey342



Anmeldungsdatum: 21.02.2015
Beiträge: 16
Wohnort: Freiburg

BeitragVerfasst am: 06.04.2020, 16:46    Titel: Antworten mit Zitat

Ja, ich fürchte du hast recht. Die Libs und Header von GCC und FBC passen nicht zusammen. Schade, aber naja, bevor ich jetzt weiterhin den vermeintlich leichteren Weg nehme, werde ich das Framework gleich komplett nach C portieren ... zwinkern

Ok, habe nochmals etwas recherchiert und habe es nun geschafft. Es fehlte noch die Lib "SHell32". Braucht man seltsamerweise mit GCC nicht. Außerdem konnte ich das "WinMain"-Problem lösen indem ich ür GCC noch die Zeile
Code:

#define SDL_MAIN_HANDLED

einfügte.
_________________
Mit besten Grüßen,
Cybermonkey
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz