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

amiga-news.de Forum > Programmierung > OS4 Progamm mit vbcc [ - Suche - Neue Beiträge - Registrieren - Login - ]

1 2 -3- 4 [ - Beitrag schreiben - ]

18.12.2007, 23:12 Uhr

MaikG
Posts: 5172
Nutzer
>müßte sich aber als Test eignen um mit -E oder auch mit Einfügen
>von #error Zeilen in diejenigen Includes die man glaubt(!) zu benutzen
>rauszufinden warum letztlich <inline4/exec.h> tatsächlich nicht
>geladen wird, das proto-file müßte das eigentlich einbinden wenn
>obiges #define vorhanden ist.

Hab jetzt mal die sachen(ausser lib und die st#? Dateien) die mit
vbcc-Target mitkamen gelöscht.
Nach einigen änderungen(weil cgx unvollständig ist) Compiliert
er jetzt durch.

Nur die erzeugte Datei macht gar nix.
Dann hab ich noch ein Hello World gemacht - nix passiert.

[ - Antworten - Zitieren - Direktlink - ]

18.12.2007, 23:36 Uhr

ZeroG
Posts: 1486
Nutzer
@MaikG:

Mehr Infos bitte, lass dir nicht alles einzeln aus der Nase ziehen.

Fangen wir mit helloworld an und tasten uns dan langsam vor.

Wie sah die Kommondozeile aus mit der du compiliert hast?

Hast du wirklich eine Programmdatei erzeugt, oder nur eine Objektdatei?

Oder war von den Sachen die du von vbcc gelöscht hast doch was wichtig?

Hättest du mal lieber das große SDK gezogen, da ist vbcc dabei und wird garantiert richtig installiert, anschliessend mit der aktuellen Version überbügeln fertig.

[ - Antworten - Zitieren - Direktlink - ]

19.12.2007, 10:25 Uhr

MaikG
Posts: 5172
Nutzer
>Mehr Infos bitte, lass dir nicht alles einzeln aus der Nase ziehen.

Doppelklick -> Nix, kein Programm, kein Absturz.


>Fangen wir mit helloworld an und tasten uns dan langsam vor.

Ja, das geht doch. VBCC gibt printf wohl nur aus wenn man
aus einem CLI startet. SASC macht da ein Fenster auf
der WB auf und braucht kein CLI.

Allerdings hab ich printf's ins Programm gesetzt unter
Main+Variablen/Struktur definitionen.
Schon das erste kommt nicht, trotz CLI.


>Wie sah die Kommondozeile aus mit der du compiliert hast?

vc test.c -lamiga -lauto


>Hast du wirklich eine Programmdatei erzeugt, oder nur eine
>Objektdatei?

Ist eine ELF.

>Oder war von den Sachen die du von vbcc gelöscht hast doch was
>wichtig?

Unbekannt, zumindest läuft der Compiler jetzt ohne Fehler
durch. Ich würde drauf tippen die Target-Includes sind älter
als das SDK.


>Hättest du mal lieber das große SDK gezogen, da ist vbcc dabei und
>wird garantiert richtig installiert, anschliessend mit der
>aktuellen Version überbügeln fertig.

:nuke:


Ist eh nur ein Experiment.


[ - Antworten - Zitieren - Direktlink - ]

19.12.2007, 11:05 Uhr

Solar
Posts: 3674
Nutzer
Zitat:
Original von MaikG:

>Fangen wir mit helloworld an und tasten uns dan langsam vor.

Ja, das geht doch. VBCC gibt printf wohl nur aus wenn man
aus einem CLI startet. SASC macht da ein Fenster auf
der WB auf und braucht kein CLI.


Ich bezweifle, daß das eine Sache des Compilers ist. Eher ein Ding der Laufzeitumgebung.

Zitat:
Allerdings hab ich printf's ins Programm gesetzt unter
Main+Variablen/Struktur definitionen.
Schon das erste kommt nicht, trotz CLI.


Wieso Variablen / Strukturdefinitionen in einem "Hallo Welt"?

Zitat:
>Hast du wirklich eine Programmdatei erzeugt, oder nur eine
>Objektdatei?

Ist eine ELF.


"ELF" kann sowohl das eine als auch das andere sein. Wenn Du die Frage nicht verstehst, frag nach.

[ - Antworten - Zitieren - Direktlink - ]

19.12.2007, 11:14 Uhr

thomas
Posts: 7677
Nutzer
@MaikG:
Zitat:
Hab jetzt mal die sachen(ausser lib und die st#? Dateien) die mit
vbcc-Target mitkamen gelöscht.


Daß das eine ziemlich dumme Idee ist, ist dir nicht in den Sinn gekommen ?

Am besten, du machst die VBCC-Sachen aus der User-Startup raus, startest neu, löschst das ganze VBCC-Verzeichnis, entpackst das SDK irgendwohin und installierst dann VBCC neu. Nimm *nicht* "Einsteiger", sondern "Experte" und denk erst nach, bevor du die Fragen beantwortest, die bei der Installation gestellt werden.

Vor allem brauchst du nicht nur die Includes, sondern auch das Newlib-Verzeichnis aus dem SDK.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

19.12.2007, 14:39 Uhr

MaikG
Posts: 5172
Nutzer
>Wieso Variablen / Strukturdefinitionen in einem "Hallo Welt"?

Ich mein das komplexere Programm.



>Daß das eine ziemlich dumme Idee ist, ist dir nicht in den Sinn
>gekommen ?

Es compilierte vorher nunmal nicht und jetzt schon, also
war das irgendwie was gutes.


>Am besten, du machst die VBCC-Sachen aus der User-Startup raus,

Hab ich da gar nicht drin.



>Vor allem brauchst du nicht nur die Includes, sondern auch das
>Newlib-Verzeichnis aus dem SDK.

Wozu?

Ich hab rausgefunden das die WritePixelArray und ReadPixelArray
sind das Problem.
Sind die im Programm, passiert gar nichts.
Auch wenn die unter Funktionen, wo die drin stehen gar nicht aufgerufen werden.
werden.

So falsch kann die Install also nicht sein, wenn
dos,exec,intuition, graphics und diskfont schonmal funktionieren.

[ - Antworten - Zitieren - Direktlink - ]

19.12.2007, 15:26 Uhr

MaikG
Posts: 5172
Nutzer
>Am besten, du machst die VBCC-Sachen aus der User-Startup raus,
>startest neu, löschst das ganze VBCC-Verzeichnis, entpackst das
>SDK irgendwohin und installierst dann VBCC neu. Nimm *nicht*
>"Einsteiger", sondern "Experte" und denk erst nach, bevor du die
>Fragen beantwortest, die bei der Installation gestellt werden.

Okay, hab ich. Ergebniss ist das selbe ohne WPA/RPA okay, mit
keine Reaktion.


[ - Antworten - Zitieren - Direktlink - ]

19.12.2007, 16:00 Uhr

TetiSoft
Posts: 197
Nutzer
Zitat:
ohne WPA/RPA okay, mit keine Reaktion.

Seltsam. Wenn es gcc wäre, würde ich mir eine Datei mit
cross-reference-table und linker-Map erstellen lassen
und da mal einen Blick reinwerfen was so von wo dazugelinkt
wird wenn die Funktionen dabei sind und wenn nicht.

Wenn das Programm nicht bis zu main() kommt,
ist zunächst mal die libauto.a verdächtig
(automatisches Öffnen fehlgeschlagen) aber Du
hast ja geschrieben daß graphics eigentlich geht...

[ - Antworten - Zitieren - Direktlink - ]

19.12.2007, 16:04 Uhr

Solar
Posts: 3674
Nutzer
Zitat:
Original von MaikG:

>Daß das eine ziemlich dumme Idee ist, ist dir nicht in den Sinn
>gekommen ?

Es compilierte vorher nunmal nicht und jetzt schon, also
war das irgendwie was gutes.


Regel #1: Wenn Du nicht weißt, warum ein Problem verschwunden ist, hast Du es nicht gelöst, sondern nur umgangen. In der Regel springt Dir sowas später wieder in's Genick.

Ich halt' mich ab jetzt raus. Wenn jemand dermaßen planlos in der Gegend herumprobiert, holt man sich beim helfen wollen höchstens Kopfschmerzen.

[ - Antworten - Zitieren - Direktlink - ]

19.12.2007, 17:55 Uhr

MaikG
Posts: 5172
Nutzer
>Seltsam. Wenn es gcc wäre, würde ich mir eine Datei mit
>cross-reference-table und linker-Map erstellen lassen
>und da mal einen Blick reinwerfen was so von wo dazugelinkt
>wird wenn die Funktionen dabei sind und wenn nicht.

Also gibts die Funktionen unter OS4 immerhin noch?
Ja, bei den Inline übersetzungen hab ich nachgesehen
da stehen die beiden auch drinnen...

>Wenn das Programm nicht bis zu main() kommt,
>ist zunächst mal die libauto.a verdächtig
>(automatisches Öffnen fehlgeschlagen) aber Du
>hast ja geschrieben daß graphics eigentlich geht...

Nur die 2 Funktionen von der cybergraphics.library gehen nicht.

[ - Antworten - Zitieren - Direktlink - ]

19.12.2007, 18:17 Uhr

TetiSoft
Posts: 197
Nutzer
Zitat:
Original von MaikG:
Nur die 2 Funktionen von der cybergraphics.library gehen nicht.


Verwechselte RPA/WPA mit RPA8/WPA8, sorry.
Also dann tippe ich auf den autoopen-code in libauto.a für
cybergraphics.library (falls es den überhaupt gibt).
Such nach "ICyberGfx". Mit DebugLevel 5 oder 10 beim Debug-Kernel
kannst Du ein Log erstellen in dem drinstehen sollte ob das
Öffnen der Library und des Interface klappt, evtl geht auch
SnoopDOSPPC aber das ist instabil.

[ - Antworten - Zitieren - Direktlink - ]

19.12.2007, 20:25 Uhr

ZeroG
Posts: 1486
Nutzer
@TetiSoft:
Cybergraphics wird nicht von libauto.a geöffnet. Das muß man also per Hand machen oder sich eine neue libauto.a basteln.

Statt SnoopDOS nimmt man besser Snoopy.

@MaikG
Eigendlich hätte der Compiler meckern müssen weil ICyberGfx nirgends definiert wird. Hast du die Warnungen/Fehlermeldungen ausgeschaltet, oder vergessen das hier reinzuschreiben?

[ - Antworten - Zitieren - Direktlink - ]

19.12.2007, 20:31 Uhr

MaikG
Posts: 5172
Nutzer
>Mit DebugLevel 5 oder 10 beim Debug-Kernel
>kannst Du ein Log erstellen in dem drinstehen sollte ob das
>Öffnen der Library und des Interface klappt, evtl geht auch
>SnoopDOSPPC aber das ist instabil.


Steht nichts dazu im Log drin.


>Cybergraphics wird nicht von libauto.a geöffnet. Das muß man also
>per Hand machen oder sich eine neue libauto.a basteln.

So?

CyberGfxBase = OpenLibrary ("cybergraphics.library",0);

Steht doch im programm drinnen.


>Eigendlich hätte der Compiler meckern müssen weil ICyberGfx nirgends
>definiert wird. Hast du die Warnungen/Fehlermeldungen ausgeschaltet,
>oder vergessen das hier reinzuschreiben?

Nein.

[ - Antworten - Zitieren - Direktlink - ]

20.12.2007, 00:09 Uhr

ZeroG
Posts: 1486
Nutzer
@MaikG:
Zitat:
>Cybergraphics wird nicht von libauto.a geöffnet. Das muß man also
>per Hand machen oder sich eine neue libauto.a basteln.

So?

CyberGfxBase = OpenLibrary ("cybergraphics.library",0);

Steht doch im programm drinnen.


>Eigendlich hätte der Compiler meckern müssen weil ICyberGfx nirgends
>definiert wird. Hast du die Warnungen/Fehlermeldungen ausgeschaltet,
>oder vergessen das hier reinzuschreiben?

Nein.


:nuke: Wie oft soll man dir eigendlich noch sagen du sollst os4_migration_guide.pdf lesen?!? :nuke:

Du hast das offensichtlich immer noch nicht getan, sonst wüstest du das es unter OS4 nicht mehr reicht nur die jeweilige Library per IExec->OpenLibrary() zu öffnen.

Du mußt zusätzlich mit IExec->GetInterface() das gewünschte Interface der Library öffnen.

Wenn man jetzt unbedingt noch OS3-Style benutzen will muß man __USE_INLINE__ vor den #include-Anweisungen definieren, damit der Preprozessor z.B. aus OpenLibrary() IExec->OpenLibrary() macht.

Wenn jetzt im Autoinitcode UND in deinem Code niemand die Interfacepointer (im Fall von CGX ist das ICyberGfx) definiert MUSS das Fehlermeldungen schmeißen, da der Compiler so ja nur weiß das da irgendwo eine Variable namens ICyberGfx kommen sollte - was aber nie der Fall ist.

Hinterher bei den CGX-Funktionsaufrufen wird sogar probiert wird über einen Pointer -der in deinem Programm gar nicht existiert- in eine Funktion zu springen.

Wenn das wirklich keine Fehlermeldungen beim compilieren schmeißt hast du die Compilerinstallation wahrscheinlich komplett (entschuldigung für das Wort) versaut.

Richte bitte deinen Compiler richtig ein, vorher hat es keinen Sinn über die Lösung deines Interfacepointer-Problemchens nachzudenken.

[ - Antworten - Zitieren - Direktlink - ]

20.12.2007, 08:48 Uhr

TetiSoft
Posts: 197
Nutzer
Zitat:
Original von ZeroG:
@TetiSoft:
Statt SnoopDOS nimmt man besser Snoopy.


Normalerweise auf jeden Fall, aber OpenLibrary() loggt es glaube
ich nicht mit. Es ist auch wahrscheinlich daß man das Laden von
emulation.library per LoadSeg() verpaßt weil es vorher schon passiert
also ist nicht zu erwarten daß das Öffnen con cybergraphics.library
mit Snoopy angezeigt wird (alles nur geraten).

[ - Antworten - Zitieren - Direktlink - ]

20.12.2007, 10:50 Uhr

MaikG
Posts: 5172
Nutzer
>Wie oft soll man dir eigendlich noch sagen du sollst os4_migration_guide.pdf
>lesen?!? :nuke:

>Du hast das offensichtlich immer noch nicht getan, sonst wüstest du
>das es unter OS4 nicht mehr reicht nur die jeweilige Library per
>IExec->OpenLibrary() zu öffnen.

Man sagte mir es würde reichen das ins Programm zu setzten:

#define CLIB_EXEC_PROTOS_H 1
#define CLIB_DOS_PROTOS_H 1
#define CLIB_ICON_PROTOS_H 1
#define CLIB_INTUITION_PROTOS_H 1
#define CLIB_GADTOOLS_PROTOS_H 1
#define CLIB_GRAPHICS_PROTOS_H 1
#define CLIB_DISKFONT_PROTOS_H 1
#define CLIB_WORKBENCH_PROTOS_H 1
#define CLIB_WB_PROTOS_H 1


#define __USE_INLINE__


um ein OS3 Programm ohne änderungen für OS4 zu Compilieren.
Das alleine ist schon genug aufwand für eine OS4 Version.



>Wenn jetzt im Autoinitcode UND in deinem Code niemand die Interfacepointer (im Fall von CGX ist das ICyberGfx) definiert MUSS das Fehlermeldungen schmeißen, da der Compiler so ja nur weiß das da irgendwo eine Variable namens ICyberGfx kommen sollte - was aber nie der Fall ist.

ICyberGfx fehler kommen nur, wenn ich -lauto nicht angebe.


>Wenn das wirklich keine Fehlermeldungen beim compilieren schmeißt
>hast du die Compilerinstallation wahrscheinlich komplett
>(entschuldigung für das Wort) versaut.

Hab es extra nochmal so gemacht wie beschrieben, kein unterschied
zur vorgänger Installation.

[ - Antworten - Zitieren - Direktlink - ]

20.12.2007, 11:16 Uhr

Solar
Posts: 3674
Nutzer
Zitat:
Original von MaikG:

Man sagte mir es würde reichen das ins Programm zu setzten...


Wie merkbefreit kann man eigentlich sein?

{...gelöscht, Selbstzensur...}

Zitat:
Original von ZeroG (14.12.):

Wenn du Libraryfunktionen aufrufen willst mußt du für native OS4 Programme die neuen Interfacepointer beachten.


Versuche Dich mal am verstehen, statt am abtippen.

[ Dieser Beitrag wurde von Solar am 20.12.2007 um 11:19 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

20.12.2007, 11:19 Uhr

ZeroG
Posts: 1486
Nutzer
@MaikG
Zitat:
Man sagte mir es würde reichen das ins Programm zu setzten:
...
um ein OS3 Programm ohne änderungen für OS4 zu Compilieren.
Das alleine ist schon genug aufwand für eine OS4 Version.

Stimmt ja auch, da sich normalerweise -lauto um den fehlenden Interfacepointer kümmert. Selbst die ganzen CLIB_#?_PROTOS_H 1 Dinger sollten eigendlich nicht benötigt werden. Bei GCC bin ich mir 100%ig sicher das das so ist, bei vbcc nur zu 99% weil du der erste bist von dem ich gehört hab das er sowas machen musste. Ich bin gerade zu faul extra für dich VBCC zu installieren.

Du kannst dir übrigens arbeit sparen wenn du dir 1x eine Headerdatei mit allen #define anlegst und diesen in jedem Programm das du compilieren willst als erstes einbindest.

Zitat:
ICyberGfx fehler kommen nur, wenn ich -lauto nicht angebe.
Bringt vbcc sein eigenes libauto.a mit?

[ - Antworten - Zitieren - Direktlink - ]

20.12.2007, 11:25 Uhr

TetiSoft
Posts: 197
Nutzer
@MaikG:

Du hast also CyberGfxBase als globale Variable im Programm aber
nicht ICyberGfx? Dann wird der autoopen-Code für ICyberGfx wahrscheinlich einfach Dein Programm abbrechen weil CyberGfxBase NULL
ist wenn er läuft. Du solltest dafür sorgen daß CyberGfxBase nicht
NULL ist, am einfachsetn indem Du es gar nicht selbst deklarierst
und auch nicht selbst öffnest und schließt sondern dem autoopen-Code
das überläßt, dann läuft Dein Programm allerdings nicht mehr ohne
CGFX oder P96. Oder Du deklarierst, öffnest und schließt alles selbst.

[ - Antworten - Zitieren - Direktlink - ]

20.12.2007, 11:59 Uhr

thomas
Posts: 7677
Nutzer
@ZeroG:

Zitat:
Selbst die ganzen CLIB_#?_PROTOS_H 1 Dinger sollten eigendlich nicht benötigt werden. Bei GCC bin ich mir 100%ig sicher das das so ist, bei vbcc nur zu 99% weil du der erste bist von dem ich gehört hab das er sowas machen musste.

Muß man auch nicht. Er hat immer noch nicht seine VBCC-Installation auf die Reihe bekommen.

Zitat:
Du kannst dir übrigens arbeit sparen wenn du dir 1x eine Headerdatei mit allen #define anlegst und diesen in jedem Programm das du compilieren willst als erstes einbindest.

Moch doch nicht solche Vorschläge. Sag ihm lieber, er soll VBCC sauber installieren.

Gruß Thomas


--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

20.12.2007, 12:56 Uhr

MaikG
Posts: 5172
Nutzer
Ich hab mal das probiert.
Das mit // ist im migration pdf, geht aber nicht
IExec ist nicht mitglied irgendwas erzählt der Compiler.
Habs dann so probiert, bekomme eine Warnung, läuft aber durch.
Startet so auch nicht.


>CyberGfxBase = OpenLibrary ("cybergraphics.library",0);

>if (CyberGfxBase) {
> //ICyberGfx = (struct CyberGfxIFace *)IExec->GetInterface(CyberGfxBase, main, 1, NULL);
> ICyberGfx = (struct CyberGfxIFace *)GetInterface(CyberGfxBase, main, 1, NULL);
if (!ICyberGfx) return(0);
>}

[ - Antworten - Zitieren - Direktlink - ]

20.12.2007, 13:06 Uhr

MaikG
Posts: 5172
Nutzer
>Versuche Dich mal am verstehen, statt am abtippen.

Dann mekkert man wieder warum ich frage "warum?" anstatt einfach
zu machen.
So oder so, man kann es insbesondere dir nicht recht machen.


>Du kannst dir übrigens arbeit sparen wenn du dir 1x eine Headerdatei
>mit allen #define anlegst und diesen in jedem Programm das du
>compilieren willst als erstes einbindest.

Gibt es bei VBCC nicht eine Variable, an der der SRC
erkennen kann ob für OS3 oder OS4 Compilert wird?
Wenn ich jetzt mit irgendwelchen OS4 Funktionen arbeiten muss
brauch ich sowas.


>Bringt vbcc sein eigenes libauto.a mit?

Ja, schaut so aus. Soll ich die Löschen?

>Du hast also CyberGfxBase als globale Variable im Programm aber
>nicht ICyberGfx?

Ja, woher soll ICyberGfx in einem OS3 Programm kommen?

>Dann wird der autoopen-Code für ICyberGfx wahrscheinlich einfach Dein Programm abbrechen weil CyberGfxBase NULL
>ist wenn er läuft.

Das Programm passt sich an, je nachdem ob CGX da ist oder nicht.
Selbst brincht es daher jedenfalls nicht ab.


>Du solltest dafür sorgen daß CyberGfxBase nicht
>NULL ist, am einfachsetn indem Du es gar nicht selbst deklarierst
>und auch nicht selbst öffnest und schließt sondern dem autoopen-Code
>das überläßt, dann läuft Dein Programm allerdings nicht mehr ohne
>CGFX oder P96.

Ja, ebend, ich muss ja wissen ob CGX da ist oder nicht.


>Muß man auch nicht. Er hat immer noch nicht seine VBCC-Installation
>auf die Reihe bekommen.

ICH HABE VBCC NOCHMAL NEU WIE HIER BESCHRIEBEN WURDE INSTALLIERT!!!

[ - Antworten - Zitieren - Direktlink - ]

20.12.2007, 13:46 Uhr

TetiSoft
Posts: 197
Nutzer
@MaikG:

Um zu verhindern daß der autoopen-Code hinzugelinkt wird muß

struct CyberGfxIFace *ICyberGfx;

als globale Variable deklariert werden.
Beim GetInterface()-Aufruf muß "main" in Anführungszeichen stehen.

[ - Antworten - Zitieren - Direktlink - ]

20.12.2007, 14:23 Uhr

ZeroG
Posts: 1486
Nutzer
@MaikG
Zitat:
Gibt es bei VBCC nicht eine Variable, an der der SRC
erkennen kann ob für OS3 oder OS4 Compilert wird?
Wenn ich jetzt mit irgendwelchen OS4 Funktionen arbeiten muss
brauch ich sowas.

Klar gibts sowas.

Zum 100sten mal: Lese doch endlich mal os4_migration_guide.pdf.

Tip: Seite 3

Zitat:
>Bringt vbcc sein eigenes libauto.a mit?

Ja, schaut so aus. Soll ich die Löschen?

NEIN.

Zitat:
>Du hast also CyberGfxBase als globale Variable im Programm aber
>nicht ICyberGfx?

Ja, woher soll ICyberGfx in einem OS3 Programm kommen?

In einem OS3 Programm hat das nicht zu suchen, du machst ja gerade ein OS4 Programm da muß das rein.

Zitat:
>Dann wird der autoopen-Code für ICyberGfx wahrscheinlich einfach Dein Programm abbrechen weil CyberGfxBase NULL
>ist wenn er läuft.

Das Programm passt sich an, je nachdem ob CGX da ist oder nicht.
Selbst brincht es daher jedenfalls nicht ab.

Den Teil kannst eigendlich so ändern das unter OS4 immer CGX benutzt wird. OS4 hat ja immer P96 installiert also ist die abfrage völlig sinnfrei und vergrößert nur unnötig das Executable.

Zitat:
>Du solltest dafür sorgen daß CyberGfxBase nicht
>NULL ist, am einfachsetn indem Du es gar nicht selbst deklarierst
>und auch nicht selbst öffnest und schließt sondern dem autoopen-Code
>das überläßt, dann läuft Dein Programm allerdings nicht mehr ohne
>CGFX oder P96.

Ja, ebend, ich muss ja wissen ob CGX da ist oder nicht.

Musst du unter OS4 eben nicht weil p96 immer da ist.

[ - Antworten - Zitieren - Direktlink - ]

20.12.2007, 15:28 Uhr

MaikG
Posts: 5172
Nutzer
>Zum 100sten mal: Lese doch endlich mal os4_migration_guide.pdf.

Hab ich schon 3 mal.


>In einem OS3 Programm hat das nicht zu suchen, du machst ja gerade
>ein OS4 Programm da muß das rein.

NEIN! Ich will das dieses Programm wie vorher auch ohne
weiteres für OS3 68k+WOS kompatiblel bleibt.
Jetzt möchte ich nur das es zusätzlich zu OS4 kompatibel
ist.


>Den Teil kannst eigendlich so ändern das unter OS4 immer CGX
>benutzt wird. OS4 hat ja immer P96 installiert also ist die
>abfrage völlig sinnfrei und vergrößert nur unnötig das Executable.


Siehe oben.

>Musst du unter OS4 eben nicht weil p96 immer da ist.

Siehe oben.

[ - Antworten - Zitieren - Direktlink - ]

20.12.2007, 15:45 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von MaikG:
>Zum 100sten mal: Lese doch endlich mal os4_migration_guide.pdf.

Hab ich schon 3 mal.


Dann lies das mal gründlich:

Zitat:
Speaking of preprocessor symbols, the compiler defines a preprocessor symbol when targeting AmigaOS 4.0:
__amigaos4__. You can use this symbol for optional compilation of code.


Das dürfte auch für den VBCC mit aosppc-Target zutreffen.

Hätte ich jetzt fast vergessen: __USE_INLINE__ reicht normalerweise völlig aus, um ehemalige 68K-Programme durch den VBCC oder GCC unter OS4 zu bekommen. Normalerweise ist da auch keine Unterscheidung zwischen OS3 und OS4 notwendig.

Das gilt natürlich nur gesetzt den Fall, die Compiler-Installation ist hasenrein und nicht durch "geht nich, also löschen wir irgendwas, was möglicherweise den Fehler ausspuckt" verhunzt und das Programm selbst steigt nicht in irgendwelche Untiefen von z.B. Exec hinab.

Zu den gut compilierbaren Programmen zählen auch jene, die das CGFX-API nutzen, kann nur sein, daß man die Inline-Includes "nachreichen" muß.
--
---

:boing: µA1 PPC 750GX-800
:boing: A4000 PPC 604e-233


[ Dieser Beitrag wurde von whose am 20.12.2007 um 16:01 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

20.12.2007, 16:10 Uhr

Solar
Posts: 3674
Nutzer
Abgesehen davon gibt es solch bahnbrechende Innovationen wie #ifdef's, aber das kann man unserem Kandidaten hier ja gleich aus mehreren Gründen nicht zumuten... :dance3:

[ - Antworten - Zitieren - Direktlink - ]

20.12.2007, 16:22 Uhr

whose
Posts: 2156
Nutzer
@Solar:

Warte, es kommt evtl. noch besser ;)

@MaikG:

Hier mal ein Ausschnitt aus dem Include "proto/cybergraphics.h":
C code:
/****************************************************************************/

#ifndef __NOLIBBASE__
extern struct Library * CyberGfxBase;
#endif /* __NOLIBBASE__ */

/****************************************************************************/

#ifdef __amigaos4__
 #include <interfaces/cybergraphics.h>
 #ifdef __USE_INLINE__
  #include <inline4/cybergraphics.h>
 #endif /* __USE_INLINE__ */
 #ifndef CLIB_CYBERGRAPHICS_PROTOS_H
  #define CLIB_CYBERGRAPHICS_PROTOS_H 1
 #endif /* CLIB_CYBERGRAPHICS_PROTOS_H */
 #ifndef __NOGLOBALIFACE__
  extern struct CyberGfxIFace *ICyberGfx;
 #endif /* __NOGLOBALIFACE__ */
#else /* __amigaos4__ */

(mit hoffentlich freundlicher Genehmigung der Rechteinhaber)

Schau mal in Dein SDK, ob Du diesen Teil in der Datei "proto/cybergraphics.h" genau so wiederfindest. Solltest Du in diesem Ausschnitt einen Unterschied feststellen, poste diesen doch mal bitte.

Sollte kein Unterschied bestehen, gib uns doch bitte nochmal den exakten Befehl, mit dem Du den Compiler aufrufst.

--
---

:boing: µA1 PPC 750GX-800
:boing: A4000 PPC 604e-233

[ - Antworten - Zitieren - Direktlink - ]

20.12.2007, 16:35 Uhr

ZeroG
Posts: 1486
Nutzer
@MaikG:
Zitat:
Hab ich schon 3 mal.
Und wieso in Gottes namen fragst du dann noch nach Dingen die da klipp und klar drinstehen???

Wenn du irgendeinen Teil davon nicht verstehen kannst darfst du gerne Nachfragen, aber hör bitte damit auf immer zu behaupten "Ich habs gelesen, aber das steht da nicht drin.".

Zitat:
>In einem OS3 Programm hat das nicht zu suchen, du machst ja gerade
>ein OS4 Programm da muß das rein.

NEIN! Ich will das dieses Programm wie vorher auch ohne
weiteres für OS3 68k+WOS kompatiblel bleibt.
Jetzt möchte ich nur das es zusätzlich zu OS4 kompatibel
ist.

Denk doch mal nach...

Du versucht gerade einen Quelltext der für OS3 geschrieben wurde zu einem OS4-Programm zu compilieren. Also machst du gerade ein OS4 Programm, das sich selbstverständlich auch an die OS4 Regeln zu halten hat. Klar soweit?

Da sich dein Programm daran anpassen will ob CGX verfügbar ist oder nicht scheint der normale weg dafür zu sorgen das sich dein neues OS4 Programm an die Regeln hält nicht zu funktionieren (linken gegen libauto.a was sich für dich um die Interfacepointer kümmert).

Mit Intuition und Co scheint das linken zu klappen. Bei CGX nicht - wahrscheinlich wegen dieser "läuft mit und ohne CGX"-Geschichte.
Könnte natürlich auch dein Compiler Setup sein, vielleicht solltest du das erstmal in den Griff kriegen. Dazu weiter unten ein kleiner Test.

Du kannst alles was überflüssig ist (CGX geht ja immer) nur für die OS4-Version rausschmeißen, whose hat dir ja das mit __amigaos4__ verraten, wenn du dann für OS3 compilierst ist es immer noch da.



Kleiner Test ob dein Compiler setup jetzt passt:

Kriegst du es hin ohne änderungen an dem Programm oder den Systemheadern folgendes Beispiel fehlerfrei zu compilieren und laufen zu lassen (linken gegen libauto.a nicht vergessen)?

code:
#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/intuition.h>

int main(int argc, char **argv)
{
    struct Window *win;

    win = IIntuition->OpenWindowTags(NULL,
        WA_Title, "Example Window",
        WA_Width, 640,
        WA_Height, 480,
    TAG_DONE);

    IDOS->Delay(150);

    IIntuition->CloseWindow(win);

    return 0;
}


[ - Antworten - Zitieren - Direktlink - ]

20.12.2007, 16:45 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von ZeroG:
Du kannst alles was überflüssig ist (CGX geht ja immer) nur für die OS4-Version rausschmeißen, whose hat dir ja das mit __amigaos4__ verraten, wenn du dann für OS3 compilierst ist es immer noch da.


Der Witz dabei ist ja, daß ich hier unter OS4 mit dem vbcc ohne jegliche Probleme ein CGFX-lastiges Programm mit dem simplen __USE_INLINE__ compilieren kann. Es läuft sogar ;)

Ein Test auf die CGFX Library funktioniert normalerweise auch unter OS4 problemlos. Ich will es jetzt nicht beschwören (müßte ich ausprobieren), aber selbst libauto müßte dabei (CyberGraphX-API) mitspielen.

Ich gehe ganz stark davon aus, daß er bei seiner Rumprobiererei einiges verbogen hat. Den anderen Problemen nach zu schließen, die er hat, betrifft das nicht nur das SDK...


--
---

:boing: µA1 PPC 750GX-800
:boing: A4000 PPC 604e-233

[ - Antworten - Zitieren - Direktlink - ]


1 2 -3- 4 [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > OS4 Progamm mit vbcc [ - Suche - Neue Beiträge - Registrieren - Login - ]


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