amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

[Login] [Registrieren] [Passwort vergessen?]

< Nächste MeldungVorige Meldung >
29.Okt.2022



AmigaOS 4.1: Einführung in das Software Development Kit V54.16, Teil 2 (Update)
Vor gut drei Wochen hatten wir den ersten Teil der von Josef Wegner geschriebenen Einführung in das kürzlich von Hyperion Entertainment aktualisierte Software Development Kit (SDK) V54.16 veröffentlicht. Hier nun der zweite Teil:

"AmigaOS 4.1 SDK 54.16 - Wie installiert man das?

Im zweiten Artikel werde ich zeigen, wie man das SDK installiert. Da ich leider nicht auf jede individuelle Konfiguration eingehen kann, gehe ich davon aus, dass AmigaOS 4.1 Final Edition Update 2 installiert ist, d.h. das Update 2 ist bereits eingespielt. Allerdings ist es irrelevant, ob weitere Software oder der Enhancer 2.2 installiert ist.

Was braucht man für die Installation?

Wie im ersten Absatz erwähnt, sollte das Update 2 von AmigaOS 4.1 Final Edition installiert sein. Daneben braucht man:
  • ausreichend Zeit; auf einem PPC-Amiga benötigt die Installation 10 - 20 Minuten Zeit
  • 200 - 920 MB freien Speicher auf einem NGFS oder SFS Laufwerk (am besten ein weiteres Laufwerk neben dem Systemlaufwerk) für das installierte SDK
  • 350 - 400 MB zusätzlich frei auf einem (anderen) Laufwerk zum Entpacken des Archivs
  • das Installationsarchiv
Gibt es Dinge, die ich vor der Installation tun sollte?

Ja, es gibt ein bis zwei Dinge, die man machen sollte, bevor man das SDK installiert:

Als erstes sollte man eine Kopie von seiner S:User-Startup machen. Anscheinend gibt es einen Fehler im Installer-Programm oder Installer-Script, dass die letzte Zeile aus der User-Startup gelöscht wird. Nach der Installation beide Dateien vergleichen, und sicherstellen, dass nichts fehlt.

Das zweite ist, falls ein älteres SDK installiert ist, sollte man das alte aus seiner s:User-Startup-Datei entfernen oder auskommentieren. Es handelt sich dabei um folgende Zeilen:

;BEGIN AmigaOS 4.1 SDK
assign SDK: Work:SDK
execute SDK:S/sdk-startup
;END AmigaOS 4.1 SDK


Diese Zeilen löschen oder das assign/excute mit einem ; auskommentieren. Als nächstes sollte man den Amiga neustarten und schließlich das alte SDK-Verzeichnis löschen, verschieben oder umbenennen.

Jetzt am besten das Installationsarchiv von Hyperions Webseite herunterladen und ggf. auf den Amiga transferieren. Der zweite Schritt ist das Entpacken des Installers dorthin, wo man ausreichend Platz hat: das geht zum Beispiel mit dem Standardprogramm Unarc von AmigaOS 4.1. Natürlich geht auch Archiver vom Enhancer 2.2, oder dem Kommandozeilentool "LhA". Jenachdem, was installiert ist. Ich persönlich bevorzuge die Kommandozeile, also führe ich folgendes aus:

13. > Temp: > lha -a x SHARE:SDK-54.16.lha

Die Option "-a" bewirkt, dass LhA die Attribute (Datum, Permissions) wiederherstellt. "x" steht für extrahieren der Dateien mit vollem Pfad. Der letzte Teil sagt LhA, wo das Installationsarchiv gespeichert ist.

Das Entpacken des Installationsarchivs alleine dauert schon 3-4 Minuten. Genügend Zeit, um sich einen Kaffee für den nächsten Schritt zu holen. Der nächste Schritt ist den Installer "Install SDK" im frisch entpackten Verzeichnis "SDK_Install" zu starten:


Und dann die Bestandteile des SDKs auswählen:


Eine volle Installation mit allen vier GCC-Versionen braucht allerdings etwas mehr als 900 MB. Auf einem NG-System (SAM, X1000, oder X5000) sollte es keine Platzprobleme geben. Auf Classic-System sollte man sich auf einen der vier GCCs beschränken. Das spart etwa 500MB und einiges an Zeit bei der Installation. Eine vollständige Installation mit allen vier GCCs dauert etwa 10 Minuten auf meinem X5000. Auf Classic-Systemen oder WinUAE sind es deutlich mehr. Nach der erfolgreichen Installation...


...sollte man überprüfen, ob noch alles in seiner S:User-Startup-Datei steht, und dieser neuer Eintrag am Ende hinzugekommen ist. Falls alles mit der User-Startup in Ordnung ist, und man folgenden Eintrag am Ende findet,

;BEGIN AmigaOS 4.1 SDK assign SDK: Work:SDK execute SDK:S/sdk-startup ;END AmigaOS 4.1 SDK

kann man den Amiga neustarten und nächsten Abschnitt überspringen. Im übernächsten Kapitel werden wir das SDK testen und das erste Programm kompilieren.

Was mache ich, wenn es nicht funktioniert hat?

Kein Speicherplatz? Am sichersten ist es, das nicht fertig installierte SDK zu löschen. Dann kann das SDK entweder mit weniger Optionen installieren, auf einem anderem Laufwerk installieren, oder das Laufwerk aufräumen und dann noch einmal probieren.

Fehler im Archiv? Das hatte ich bei einer Installation. Lösung war wie oben, Fehlversuch löschen und noch einmal probieren.

Fehler beim Entpacken des Installationsarchivs oder beim Schreiben der Dateien? Stellt bitte sicher, dass das SDK auf einem lokalen Laufwerk installiert wird, das am Besten mit SFS oder NGFS formatiert ist. Bitte auch kein geteiltes Laufwerk in (Win)UAE benutzen. Falls dies bereits der Fall ist, und es weiterhin Fehler gibt, sollte man das Laufwerk auf Fehler prüfen. Beim NGFS geht das mit dem Befehl:

NGFCheck Work:

Wobei Work: entweder der Volumenname oder der Gerätename des Laufwerks ist.

So, SDK ist installiert. Und was jetzt?




Jetzt können wir endlich mal das SDK ausprobieren. Im Artikel 1 wurde ja gesagt, das SDK kommt mit mehrenen GCCs und dem VBCC. Also schauen wir, ob alle funktionieren. Falls mindestens ein GCC installiert wurde, können wir mit folgendem Befehl sehen, ob der GCC gefunden wird, und welche Version vom GCC aktuell benutzt wird:

gcc -v

....gcc version 8.4.0 (adtools build 8.4.0)


Das SDK hat mehrere GCCs. Wie kann ich den GCC wechseln?

Benutzt dazu das Tool "set_defGCC" in SDK:Tools. Dieses Verzeichnis liegt nicht im Suchpfad, daher muss man entweder mit der Workbench oder dem vollen Pfad öffnen.

sdk:Tools/set_defGCC

Es erscheint ein kleines Fenster, wo man zwischen den vier GCC-Versionen wählen kann. Man kann aber die Version auch direkt in der Shell angeben. Dazu hängt man die gewünschte Version hinter den Befehl. Um den GCC 11 auszuwählen, gibt man in der Shell ein:

4. > Workbench: > sdk:Tools/set_defGCC 11
4. > Workbench: > gcc -v
...gcc version 11.2.0 (adtools build 11.2.0)

Aber Vorsicht, man kann auch einen GCC wählen, der nicht installiert ist. In diesem Fall findet die Shell keinen GCC mehr. Zum Lösen ruft man das Tool noch einmal auf und wählt einen installierten GCC. Falls auch der VBCC installiert ist, kann man diesen mit folgendem Befehl testen:

vc -v
vc frontend for vbcc (c) in 1995-2020 by Volker Barthelmann
No objects to link

Jetzt können wir endlich das erste Testprogramme kompilieren und starten. Wie üblich schreiben wir ein HelloWorld-Programme in Standard-C, das ohne Codeänderungen auch auf einem anderen System kompilieren und laufen würde.

Die folgenden Zeilen in dem Editor der Wahl eingeben und als "hello.c" irgendwo speichern. Bitte die Zeilennummern weglassen!

RAM Disk:Shared/Sources/hello/hello.c
1 #include <stdio.h>
2 int main(void)
3 {
4 printf("Hallo Welt!\n");
5 return (0);
6 }

Zum Kompilieren und Starten in einer Shell folgendes ausführen:

Für den GCC:
3. > RAM Disk:Shared/Sources/hello > gcc hello.c -o hello
3. > RAM Disk:Shared/Sources/hello > hello
Hallo Welt!

Mit dem VBCC:
3. > RAM Disk:Shared/Sources/hello > vc hello.c -o hello
3. > RAM Disk:Shared/Sources/hello > hello
Hallo Welt!

Was habe ich gerade gemacht?

Ich möchte hier jetzt nicht so zu tief in die Struktur und Eigenheiten von C eintauchen. Aber ich versuche kurz zu erklären, welche Zeile was im Programm tut.
  • Zeile 1: Das ist kein C-Befehl, sondern ein Befehl für den C-Präprozessor eine andere Datei names stdio.h einzubinden. Der Präprozessor bereitet den Programmkode für weitere Kompilierschritte vor und verbessert den Funktionsumfang, die Schreibweise und die Lesbarkeit des eingegebenen Codes. Neben dem Einbinden von sogenannten Headern, kann der Präprozessor Konstanten definieren und später im Code ersetzen, Kommentare entfernen, oder Codeteile ein- und ausblenden (bedingtes Kompilieren). Die Datei stdio steht für "STanDard Input Output" und enthält die Funktionsdefinition für die Methode "printf". Diese Methode gibt den übergebenen String auf der Kommandozeile aus. Das Programm würde auch ohne diesen Präprozessorbefehl kompilieren und laufen. Allerdings würde der Kompiler Warnungen ausgeben.

  • Zeile 2: Das die Deklaration der Einstiegsfunktion. Damit C weiß, wo das Programm beginnt, muss man anders wie bei Skriptsprachen dies definieren. Bei C geschieht es dadurch, dass man die Hauptfunktion (=main) definiert. Diese muss die entweder die Form

    int main(void)
    oder
    int main(int argc, char **argv)

    haben. Die erste Form ignoriert die Parameter beim Programmaufruf, beim zweiten werden die Anzahl der Parameter (int argc) und ein Array der Parameter als C-Strings an die Methode übergeben.

  • Zeile 3 und 6: Die geschweiften Klammern definieren einen Codeblock. Damit sagen wir dem Kompiler, dass alles dazwischen (Zeile 4 + 5) Bestandteil der Funktion ist.

  • Zeile 4: Hier rufen wir eine Methode der C-Standardbibliothek auf, die den String auf der Shell ausgibt.

  • Zeile 5: Das Schlüsselwort "return" setzt den Rückgabewert der Funktion. Eine return-Anweisung beendet die Ausführung einer Funktion und gibt die Steuerung an die aufrufende Funktion zurück.Der Wert 0 bedeutet: alles in Ordnung. Man sollte immer einen Rückgabewert setzten, aber erforderlich wie bei Java ist es nicht.
Nicht alles wird wird für ein lauffähiges Programm benötigt. Wenn man viele Warnungen vom Kompiler haben (und ignorieren) will, kann man das Programm auch viel kürzer schreiben:

main(void) { printf("Hallo Welt!\n"); }

Fehlt bei C der Rückgabe- oder Variablentyp, so nimmt C einfach int (Ganzzahltyp).

Bekannte Probleme
  • Ich bekomme beim Starten des kompilierten Programms einen GrimReaper!

    Versuche das Programm auf einem anderen Laufwerk zu kompilieren. Das passiert zum Beispiel, wenn du das Programm auf einem geteilten Host-Laufwerk unter WinUAE kompilierst. Das Linken der erzeugten Objektdateien schlägt ohne Meldung fehl. Das was rauskommt, ist kein echtes Programm, und ziemlich schnell wird ein ungültiger PPC-Assemblerbefehl ausgeführt, was den GrimReaper auf den Plan ruft.

  • Ich habe das Testprogramm versucht zu debuggen, aber bekomme einen komischen SIGBUS error:

    3. > RAM Disk:Shared/Sources/hello > gcc -gstabs hello.c -o hello
    3. > RAM Disk:Shared/Sources/hello > hello
    Hallo Welt!
    3. > RAM Disk:Shared/Sources/hello > gdb hello
    ....Starting program: /RAM Disk/Shared/Sources/hello/hello...
    ...Program received signal SIGBUS, Bus error.
    0x00000000 in ?? ()
    (gdb)

    Das ist kein Problem vom SDK oder GDB, sondern ein Fehler im X5000-Kernel. Es gibt einen Beta-Kernel, wo dieses Problem behoben ist, der ist aber nicht öffentlich zugänglich.
Was kann ich machen, bis der dritte Artikel erscheint?

Erstmal freut mich, dass Ihr es bis hier her geschafft habt. Folgende Links könnten interessant sein:
  • Im offiziellen Hyperion Wiki findet man einige (englische) Tutorials, die für den Einstieg in die AmigaOS 4.1-Entwicklung hilfreich sind. Das deutsche Original des Programming AmigaOS 4 Tutorials findet man in den alten Ausgabe der Amiga Future.
  • Retrocoding: Amiga, C, graphics.library und timer.device ist ein deutsches Tutorial. Leider muss man den Kode etwas anpassen, um ihn auf AmigaOS 4.1 kompilieren zu können. Trotzdem ist es ein schöner Einstieg in die generelle Amiga-Programmierung.
  • Peter John "pjhutch" Hutchisons englisches Amiga C Tutorial ist den Lesern von Amiga-News.de bereits bekannt (amiga-news.de berichtete)
  • Will man eher Plattform-unabhängiges C schreiben, dann bietet sich "The C Book" an, wovon es auch eine freie Version gibt.
Soviel für den zweiten Teil. Im dritten Teil steigen wir etwas tiefer in die Syntax von C ein."

Update: (29.10.2022, 19:50, dr)

Der hauptverantwortliche Entwickler des SDK, George 'walkero' Sokianos, hat interessierterweise das Tutorial gelesen und bedankt sich ausdrücklich für Josefs Engagement. Darüberhinaus hat er noch drei Ergänzungen, die wir gerne hier anfügen:
  • Viele Informationen darüber, wie das SDK eingerichtet ist und wie die Compiler verwendet werden können, sind in der PDF-Datei "Introduction" enthalten, die sich im Installationsordner befindet. Für die Leute, die nicht mit dem SDK vertraut sind, ist es zu empfehlen, dieses Dokument zu lesen.
  • Verschiedene GCC-Versionen können verwendet werden, indem die Binärdatei mit der spezifischen Version im Namen verwendet wird, d.h. gcc-11 oder gcc-6.
  • Wenn AmiCygnix installiert ist, muss der Benutzer sicherstellen, dass die Zeilen, die in user-startup hinzugefügt werden, vor den AmiCygnix-Zeilen stehen, um Probleme mit der Software zu vermeiden.
(dr)

[Meldung: 29. Okt. 2022, 06:59] [Kommentare: 5 - 30. Okt. 2022, 06:48]
[Per E-Mail versenden]  [Druck-Version]  [ASCII-Version]
< Nächste MeldungVorige Meldung >

.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.