![]() |
ENGLISH VERSION |
|
![]() |
Links | | | Forum | | | Kommentare | | | News melden |
![]() |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
![]() |
amiga-news.de Forum > Programmierung > Library bauen mit gcc/AmiDevCPP | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
08.11.2009, 15:44 Uhr Thore Posts: 2266 Nutzer |
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. ] [ - Antworten - Zitieren - Direktlink - ] |
08.11.2009, 18:41 Uhr Holger Posts: 8116 Nutzer |
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. [ - Antworten - Zitieren - Direktlink - ] |
08.11.2009, 18:51 Uhr Thore Posts: 2266 Nutzer |
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... [ - Antworten - Zitieren - Direktlink - ] |
08.11.2009, 18:59 Uhr Kaesebroetchen Posts: 643 Nutzer |
@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/ [ - Antworten - Zitieren - Direktlink - ] |
08.11.2009, 19:07 Uhr Thore Posts: 2266 Nutzer |
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.... [ - Antworten - Zitieren - Direktlink - ] |
08.11.2009, 20:42 Uhr Thore Posts: 2266 Nutzer |
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? [ - Antworten - Zitieren - Direktlink - ] |
08.11.2009, 21:02 Uhr Kaesebroetchen Posts: 643 Nutzer |
Zitat: Wie schon oben beschrieben im Tools Menu bzw Werkzeuge Menü unter Compiler Optionen. Siehe auch hier -- http://amidevcpp.amiga-world.de/ [ - Antworten - Zitieren - Direktlink - ] |
08.11.2009, 21:07 Uhr Thore Posts: 2266 Nutzer |
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. [ - Antworten - Zitieren - Direktlink - ] |
08.11.2009, 21:37 Uhr Kaesebroetchen Posts: 643 Nutzer |
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/ [ - Antworten - Zitieren - Direktlink - ] |
08.11.2009, 21:50 Uhr Thore Posts: 2266 Nutzer |
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... [ - Antworten - Zitieren - Direktlink - ] |
09.11.2009, 11:38 Uhr Holger Posts: 8116 Nutzer |
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. [ - Antworten - Zitieren - Direktlink - ] |
09.11.2009, 11:53 Uhr Thore Posts: 2266 Nutzer |
Hab bisher Libs nur in Assembler programmiert. Werde mal versuchen das Ding als "normales" executable binary zu bauen und schauen obs das tut. [ - Antworten - Zitieren - Direktlink - ] |
09.11.2009, 12:04 Uhr Kaesebroetchen Posts: 643 Nutzer |
@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/ [ - Antworten - Zitieren - Direktlink - ] |
09.11.2009, 12:29 Uhr Thore Posts: 2266 Nutzer |
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. [ - Antworten - Zitieren - Direktlink - ] |
09.11.2009, 12:46 Uhr jolo Posts: 110 Nutzer |
@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 [ - Antworten - Zitieren - Direktlink - ] |
09.11.2009, 14:08 Uhr Andreas_Wolf Posts: 2980 Nutzer |
> 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. [ - Antworten - Zitieren - Direktlink - ] |
09.11.2009, 14:11 Uhr Thore Posts: 2266 Nutzer |
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.... [ - Antworten - Zitieren - Direktlink - ] |
09.11.2009, 15:13 Uhr Holger Posts: 8116 Nutzer |
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. [ - Antworten - Zitieren - Direktlink - ] |
09.11.2009, 16:31 Uhr Thore Posts: 2266 Nutzer |
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. [ - Antworten - Zitieren - Direktlink - ] |
09.11.2009, 17:34 Uhr wawa Posts: 314 Nutzer |
@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. [ - Antworten - Zitieren - Direktlink - ] |
09.11.2009, 20:01 Uhr Thore Posts: 2266 Nutzer |
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. ] [ - Antworten - Zitieren - Direktlink - ] |
-1- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > Library bauen mit gcc/AmiDevCPP | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
![]() |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2025 by amiga-news.de - alle Rechte vorbehalten. |
![]() |