DEUTSCHE VERSION |
|
Links | | | Forums | | | Comments | | | Report news |
Chat | | | Polls | | | Newsticker | | | Archive |
amiga-news.de Forum > Programmierung > Library bauen mit gcc/AmiDevCPP | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2009-11-08, 15:44 h Thore Posts: 2266 User |
Hallo Mal eine Frage... ich versuch hier gerade eine Amiga Library mit AmiDevCPP zu bauen. Hab erstmal versucht als statische Bibliothek zu linken weil das das einzige war wo er den Vorgang abschließt. Klar daß das nicht geht da eine Arch-Datei erzeugt wird... Auf OS3 Seite wird da aber nur der Version-String ausgelesen aber die Lib kann natürlich nicht geöffnet werden. Weiß jemand was ich einstellen muss, damit die Lib auch tut? Vielen Dank Thore [ Dieser Beitrag wurde von Thore am 08.11.2009 um 15:53 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2009-11-08, 18:41 h Holger Posts: 8116 User |
Eine Amiga-Library ist aus Sicht eines Compilers nichts weiter als eine ausführbare Datei. Wenn die IDE keinen speziellen Support für Amiga-Libraries anbietet, muss Du so tun, als ob Du eine normale ausführbare Datei erstellst. -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2009-11-08, 18:51 h Thore Posts: 2266 User |
Ja ist mir bekannt, ohne startupfiles zu bauen aber er findet dann einige Variablen nicht. Und auch so scheinen Funktionen mehrmals definiert zu sein... und ich kann aber nicht finden wo das genau sein soll... Muss mal den Peter fragen... [ - Answer - Quote - Direct link - ] |
2009-11-08, 18:59 h Kaesebroetchen Posts: 643 User |
@Thore: Hab gerade die Antwort auf UtilityBase gesehen also -nostartfiles zu den Linker Parametern (Projekt Optionen) hinzufügen. Zusätzlich könntest du mal versuchen Libnix rauszunehmen (Menü Tools->Compiler Optionen) Kann sein daß die reinfunken. -- http://amidevcpp.amiga-world.de/ [ - Answer - Quote - Direct link - ] |
2009-11-08, 19:07 h Thore Posts: 2266 User |
hab als Parameter -s -noixemul -nostartfiles Compilieren tut er nur beim Linken will er die Base-Variablen haben, die er nicht findet. z.B. __DOSBase aber ich hab die eigentlich im Code drin.... [ - Answer - Quote - Direct link - ] |
2009-11-08, 20:42 h Thore Posts: 2266 User |
Habe rausgefunden daß die libnix.a solche Fehlermeldungen produziert, hab auch schon den Pfad rausgenommen aber wo stell ich denn das um daß er die Linklib nicht mehr nimmt? [ - Answer - Quote - Direct link - ] |
2009-11-08, 21:02 h Kaesebroetchen Posts: 643 User |
Zitat: Wie schon oben beschrieben im Tools Menu bzw Werkzeuge Menü unter Compiler Optionen. Siehe auch hier -- http://amidevcpp.amiga-world.de/ [ - Answer - Quote - Direct link - ] |
2009-11-08, 21:07 h Thore Posts: 2266 User |
Schonmal selbst reingeschaut? Dann würdest du auch nochmal nachfragen Wie ich eben auch schon erwähnt hab, hab ich den libnix Pfad rausgenommen aber er linkt trotzdem libnix.a rein. Andere Optionen zum LinkLib hinzufügen sehe ich keine. [ - Answer - Quote - Direct link - ] |
2009-11-08, 21:37 h Kaesebroetchen Posts: 643 User |
Zitat: Hier die normale Einstellung Zitat: Hier nach entfernen der Parameter -s und -noixemul in "Werkzeuge->Compiler Optionen" Zitat: Das -L"C:/CrossCompiler/AmiDevCpp/usr/local/amiga/m68k-amigaos/lib/libb/libnix" besagt lediglich, das in diesem Pfad nach Linker Bibliotheken gesucht wird, aber nicht das irgendwas daraus verlinkt wird. Falls das bei dir auch so aussieht, ist alles richtig. -- http://amidevcpp.amiga-world.de/ [ - Answer - Quote - Direct link - ] |
2009-11-08, 21:50 h Thore Posts: 2266 User |
Ich habe keine main-Funktion....Wie gesagt, es geht hier um eine Library die ich linken will. Also ohne main-Funktion und ohne Startup Files. Probiers dann nochmal... [ - Answer - Quote - Direct link - ] |
2009-11-09, 11:38 h Holger Posts: 8116 User |
Zitat:Es muss eine main()-Funktion geben. Jede Library ist, wie bereits gesagt, eine ausführbare Datei und besitzt demzufolge auch einen Einsprungpunkt. Standardmäßig sollt dort moveq.l #0,d0:rts stehen, aber das muss auch irgendwo herkommen. Entweder, in dem im Source-Code explizit ...main(...) { return 0 } steht, oder in dem man mit einer Bibliothek verlinkt, die diese Funktion liefert. Wenn Du keine Entwicklungsumgebung hast, die die Entwicklung einer Amiga-Library unterstützt, also nichts linken kannst, muss Du die main-Funktion halt explizit liefern. Ohne geht's jedenfalls nicht. -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2009-11-09, 11:53 h Thore Posts: 2266 User |
Hab bisher Libs nur in Assembler programmiert. Werde mal versuchen das Ding als "normales" executable binary zu bauen und schauen obs das tut. [ - Answer - Quote - Direct link - ] |
2009-11-09, 12:04 h Kaesebroetchen Posts: 643 User |
@Thore: Viel Erfolg ! Falls du es hinbekommst, kannst du evtl. dein Projekt als Beispielprojekt für meine Webseite zur Verfügung stellen ? Oder alternative eine kleine Anleitung erstellen ? Ich könnte mir vorstellen daß das für andere auch interessant sein könnte. -- http://amidevcpp.amiga-world.de/ [ - Answer - Quote - Direct link - ] |
2009-11-09, 12:29 h Thore Posts: 2266 User |
Beim "Beispielprojekt" nennt sich JAmiga Aber ich bin dann gern bereit, aus der jamint.library eine dummy-Lib zu bauen, welche ich als Beispiel-Projekt weitergeben kann. Da meine jamint-Lib etwas modifiziert ist und Peter momentan nicht antwortet weiß ich nicht ob ich diese einfach weitergeben kann. [ - Answer - Quote - Direct link - ] |
2009-11-09, 12:46 h jolo Posts: 110 User |
@Thore: Hast Du das Grundgerüst der Bibliothek schon geschrieben oder arbeitest Du noch daran? Falls Interesse am Grundgerüst besteht, kann ich eine neue Version von 'Weaver' heute Abend hochladen mittels dem Du solche Grundgerüste erstellen kannst. Voraussetzung ist allerdings eine vorhandene SFD-Datei. Falls Du nur Probleme beim Kompilieren/Linken hast, so ändere die Befehlszeile für 'gcc' ähnlich der unteren Befehlszeile ab: gcc -s -msmall-code -m68020 -fstrength-reduce -O3 -noixemul -nostdlib -nostartfiles name-library.c -o RAM:name.library Fließkomma- sowie Standard-C-Lib-Funktionen sind innerhalb einer Bibliothek ein Tabu weil diese Funktionen weder Thread-Safe noch reentrant sind. Bei Bedarf müsstest Du diese selber unter Verwendung der Betriebssystemfunktionen nachbilden. Anbei, eine Funktion 'main()' gibt es innerhalb einer Bibliothek nicht. Für MorphOS/AmigaOS4 gibt es spezielle Anker, dies liegt aber im ELF-Format begründet. Grüße [ - Answer - Quote - Direct link - ] |
2009-11-09, 14:08 h Andreas_Wolf Posts: 2980 User |
> Da meine jamint-Lib etwas modifiziert ist und Peter momentan nicht antwortet > weiß ich nicht ob ich diese einfach weitergeben kann. Klar, ist doch GPL. [ - Answer - Quote - Direct link - ] |
2009-11-09, 14:11 h Thore Posts: 2266 User |
Ich habe die vorhandenen Libs für JAmiga, welche ich versuch mit AmiDevCPP zu kompilieren. Momentan besagte jamint.library. (letzte offizielle Version zu finden auf der jamiga Homepage) Am Lib-Grundgerüst hab ich nichts geändert. Die Lib braucht aber weitere Libs, so daß API Calls nötig sind, z.B. OpenLibrary und Intuition-Zeug. Momentan sitz ich auf der Arbeit und komm erst heute Abend wieder dazu. Ein weiteres Problem ist, daß angeblich NewObject mehrmals definiert wurde, jedoch finde ich nicht wo das passieren soll.... Aber alles der Reihe nach, erst sollen die Fehler aus der libnix.a verschwinden =) Wenns nichts hilft verzichte ich bei den Libs auf die IDE und versuchs über die Shell zu kompilieren (per Makefile) und schau ob die IDE mir da irgendwie dazwischenfunkt. Irgendwie muss es doch klappen =) Als Belohnung winkt dann bald vielleicht ein neues JAmiga.... [ - Answer - Quote - Direct link - ] |
2009-11-09, 15:13 h Holger Posts: 8116 User |
Zitat: Damit ist die Weitergabe möglich. Die Verwendung als Beispiel-Projekt in einer IDE, mit der man Projekte mit beliebiger Lizenz erstellen könnte, ist dagegen problematisch. -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2009-11-09, 16:31 h Thore Posts: 2266 User |
Zitat:Ja deshalb sagte ich auch, daß ich die Lib zum Beispielprojekt umbauen werde, praktisch so umbauen daß sie nur noch eine Dummy-Funktion hat und mit der ursprünglichen Lib nichts mehr zu tun hat, abgesehen vom Grundgerüst. [ - Answer - Quote - Direct link - ] |
2009-11-09, 17:34 h wawa Posts: 314 User |
@alle: ich habe den oben genannten thread auf der utilitybase aufgemacht. habe jetzt auch ne anleitung bekommen die ich versuche umzusetzten. falls mir das gelingt kann ichs weitergeben. [ - Answer - Quote - Direct link - ] |
2009-11-09, 20:01 h Thore Posts: 2266 User |
Okee, also ich hab die Library so umgebaut daß ich nur eine Dummy-Funktion hab, die einfach den Wert 13 ausgibt. Dann hab ich eine Host-Applikation gemacht, welche diese Lib öffnet und die Funktion aufruft und den Wert ausgibt. Hier funktioniert alles einwandfrei, gleich beim ersten Mal... nur wenn ich nun die jamint.lib bauen will meckert er wieder... Mal sehen ob ich das hinbekomm. Hmmmm scheint nun zu klappen, als "normales" binary. Und das NewObject Problem war weg als ich die proto/intuition.h Includes entfernt hab... Hab mit Java ein Fenster geöffnet mit der recompiled lib... scheint gut zu laufen... [ Dieser Beitrag wurde von Thore am 09.11.2009 um 20:42 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > Library bauen mit gcc/AmiDevCPP | [ - Search - New posts - Register - Login - ] |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved. |