amiga-news 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:
Original von Thore:
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?


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:
Original von Thore:
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.


Hier die normale Einstellung
Zitat:
Compiler: m68k-Amiga-OS3
Building Makefile: "C:CrossCompilerAmiDevCppMUI_MultiPlatformExampleMakefile.win"
Führt make clean aus
rm -f MultiPlatform.o MultiPlatformExample.exe

m68k-amigaos-gcc.exe -c MultiPlatform.c -o MultiPlatform.o -I"C:/CrossCompiler/AmiDevCpp/usr/local/amiga/m68k-amigaos/sys-include" -s -noixemul

MultiPlatform.c: In function 'main':
MultiPlatform.c:82: Warnung: Zuweisung from incompatible pointer type
MultiPlatform.c:148: Warnung: initialization from incompatible pointer type
m68k-amigaos-g++.exe MultiPlatform.o -o "MultiPlatformExample.exe" -L"C:/CrossCompiler/AmiDevCpp/usr/local/amiga/m68k-amigaos/lib" -L"C:/CrossCompiler/AmiDevCpp/usr/local/amiga/m68k-amigaos/lib/libb/libnix" -s -noixemul -o MultiPlatformExample

Ausführung beendet
Kompilierung erfolgreich


Hier nach entfernen der Parameter -s und -noixemul in "Werkzeuge->Compiler Optionen"
Zitat:
Compiler: m68k-Amiga-OS3
Building Makefile: "C:CrossCompilerAmiDevCppMUI_MultiPlatformExampleMakefile.win"
Führt make clean aus
rm -f MultiPlatform.o MultiPlatformExample.exe

m68k-amigaos-gcc.exe -c MultiPlatform.c -o MultiPlatform.o -I"C:/CrossCompiler/AmiDevCpp/usr/local/amiga/m68k-amigaos/sys-include"

MultiPlatform.c: In function 'main':
MultiPlatform.c:82: Warnung: Zuweisung from incompatible pointer type
MultiPlatform.c:148: Warnung: initialization from incompatible pointer type
m68k-amigaos-g++.exe MultiPlatform.o -o "MultiPlatformExample.exe" -L"C:/CrossCompiler/AmiDevCpp/usr/local/amiga/m68k-amigaos/lib" -L"C:/CrossCompiler/AmiDevCpp/usr/local/amiga/m68k-amigaos/lib/libb/libnix" -o MultiPlatformExample

Ausführung beendet
Kompilierung erfolgreich


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:
Original von Thore:
Ich habe keine main-Funktion....Wie gesagt, es geht hier um eine Library die ich linken will.

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:
Original von Andreas_Wolf:
> 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.


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:
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.
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-2024 by amiga-news.de - alle Rechte vorbehalten.
.