|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Cybermonkey342
Anmeldungsdatum: 21.02.2015 Beiträge: 16 Wohnort: Freiburg
|
Verfasst am: 05.04.2020, 13:10 Titel: Mit FreeBASIC erstellte Lib mit GCC nutzen |
|
|
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 |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 05.04.2020, 18:15 Titel: |
|
|
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 |
|
|
Cybermonkey342
Anmeldungsdatum: 21.02.2015 Beiträge: 16 Wohnort: Freiburg
|
Verfasst am: 06.04.2020, 16:46 Titel: |
|
|
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 ...
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 |
|
|
|
|
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.
|
|