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

amiga-news.de Forum > Programmierung > Anfängerfrage: Wie linke ich eine .a Datei ? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- 2 [ - Beitrag schreiben - ]

19.02.2007, 22:20 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Hallo !

Habe mir einen interessanten Code gesaugt (dumblib).
Dort ist eine .a Datei zu finden.
Jetzt habe ich alle Funktionen in eine .library gebaut, und kann auch kompilieren.
Beim Linken bekomme ich, dass es keine Refrenz gibt auf die dumblib spezifischen Funktionen. Ich denke, dass sie in der .a Datei stecken.
Wie linke ich die dazu ?

--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

19.02.2007, 23:14 Uhr

whose
Posts: 2156
Nutzer
@Der_Wanderer:

Welchen Compiler benutzt Du denn? Meist lautet die entsprechende Option -l"name der lib ohne extension". Du mußt auch darauf achten, daß die Lib sich im Suchpfad des Compilers findet, sonst mosert er weiter.

Grüße

--
---

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

[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 10:51 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Ich benutze GCC.

Die Datei heisst "libdumb.a".

Wenn ich -llibdumb mache, bekomme ich einen Fehler: Datei nicht gefunden.
Die Datei libdumb.a habe ich ins Hauptverzeichnis/aktuelle Verzeichnis kopiert.
Wo soll die Datei hin ? Oder wie sage ich GCC, wo er die Datei finden kann ?

Meine Frage war auch, ob ich überhaupt richtig denke, dass eine ".a" Datei eine vorkompiliertes Binary ist dass man dazu linken kann.

Sorry, hab noch nicht viel mit GCC gemacht. Ich programmiere sonst nur unter VisualC++, dort ist alles ein wenig einfacher.



--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 11:21 Uhr

thomas
Posts: 7675
Nutzer
Zitat:
Die Datei libdumb.a habe ich ins Hauptverzeichnis/aktuelle Verzeichnis kopiert.

Die muß in den Suchpfad von GCC, sonst findet er sie nicht. Frag mich aber nicht, wie man bei GCC den Suchpfad herausfindet.

Ich würde sie einfach in das Projekt-Verzeichnis kopieren und dann wie eine Object-Datei dazulinken (also einfach den Namen mit .a angeben, ohne -l).

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 11:33 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Habe ich auch probiert, geht nicht. Die Referenzen werden nicht gefunden, aber ld meckert nicht.

Ein

nm libdumb.a

listet mir alle möglichen .o Dateien auf, mit dem Kommentar "Unknown File Format".

objdumb sage aber, dass es 68K wäre.

Hier der Consolen Output:

11.Work:Sourcecodes/dumb> ld libdumb.a dumb_funcs.o dumblib_init.o -noixemul -nostartfiles -lamiga
dumb_funcs.o(.text+0xd6): undefined reference to 'dumb_it_callback_terminate'
dumb_funcs.o(.text+0xec): undefined reference to 'dumb_it_callback_terminate'
dumb_funcs.o(.text+0xe): undefined reference to 'load_duh'
dumb_funcs.o(.text+0x24): undefined reference to 'dumb_load_it'
dumb_funcs.o(.text+0x3a): undefined reference to 'dumb_load_xm'
dumb_funcs.o(.text+0x50): undefined reference to 'dumb_load_s3m'
dumb_funcs.o(.text+0x66): undefined reference to 'dumb_load_mod'
dumb_funcs.o(.text+0x8e): undefined reference to 'undload_duh'
dumb_funcs.o(.text+0xb0): undefined reference to 'duh_start_sigrenderer'
dumb_funcs.o(.text+0xc8): undefined reference to 'duh_get_it_sigrenderer'
dumb_funcs.o(.text+0xe0): undefined reference to 'dumb_it_set_loop_callback'
dumb_funcs.o(.text+0xf6): undefined reference to 'dumb_it_set_xm_speed_zero_callback'
dumb_funcs.o(.text+0x116): undefined reference to 'duh_get_length'
dumb_funcs.o(.text+0x152): undefined reference to 'duh_render'
dumb_funcs.o(.text+0x176): undefined reference to 'duh_end_sigrenderer'

11.Work:Sourcecodes/dumb> objdump --info libdumb.a
BFD header file version 2.9.1
amiga
(header little endian, data little endian)
m68k
UNKNOWN!
a.out-amiga
(header big endian, data big endian)
m68k
srec
(header endianness unknown, data endianness unknown)
m68k
symbolsrec
(header endianness unknown, data endianness unknown)
m68k
tekhex
(header endianness unknown, data endianness unknown)
m68k
binary
(header endianness unknown, data endianness unknown)
m68k
ihex
(header endianness unknown, data endianness unknown)
m68k

amiga a.out-amiga srec symbolsrec tekhex binary ihex
m68k amiga a.out-amiga srec symbolsrec tekhex binary ihex

11.Work:Sourcecodes/dumb> nm libdumb.a
nm: atexit.o: File format not recognized
nm: duhlen.o: File format not recognized
nm: duhtag.o: File format not recognized
nm: dumbfile.o: File format not recognized
nm: loadduh.o: File format not recognized
nm: makeduh.o: File format not recognized
nm: rawsig.o: File format not recognized
nm: readduh.o: File format not recognized
nm: register.o: File format not recognized
nm: rendduh.o: File format not recognized
nm: rendsig.o: File format not recognized
nm: unload.o: File format not recognized
nm: clickrem.o: File format not recognized
nm: memfile.o: File format not recognized
nm: resample.o: File format not recognized
nm: sampbuf.o: File format not recognized
nm: silence.o: File format not recognized
nm: stdfile.o: File format not recognized
nm: itload.o: File format not recognized
nm: itread.o: File format not recognized
nm: itload2.o: File format not recognized
nm: itread2.o: File format not recognized
nm: itrender.o: File format not recognized
nm: itunload.o: File format not recognized
nm: loads3m.o: File format not recognized
nm: reads3m.o: File format not recognized
nm: loadxm.o: File format not recognized
nm: readxm.o: File format not recognized
nm: loadmod.o: File format not recognized
nm: readmod.o: File format not recognized
nm: loads3m2.o: File format not recognized
nm: reads3m2.o: File format not recognized
nm: loadxm2.o: File format not recognized
nm: readxm2.o: File format not recognized
nm: loadmod2.o: File format not recognized
nm: readmod2.o: File format not recognized
nm: xmeffect.o: File format not recognized
nm: itorder.o: File format not recognized
nm: itmisc.o: File format not recognized
11.Work:Sourcecodes/dumb>


--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 12:34 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Die datei heißt libdump.a, dann heißt der Linkerdirektive -dump nicht -llibdump, das lib davor und das .a dahinter fügt der linker selber hinzu.

[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 12:43 Uhr

thomas
Posts: 7675
Nutzer
@Der_Wanderer:

Bist du sicher, daß das eine 68k-Linkerlib ist ?

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

[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 12:46 Uhr

gni
Posts: 1106
Nutzer
Zitat:
DariusBrewka:
Die datei heißt libdump.a, dann heißt der Linkerdirektive -dump nicht -llibdump, das lib davor und das .a dahinter fügt der linker selber hinzu.

Fast richtig, es heisst jedoch -l<name>

[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 12:51 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
uuups, sorry vergessen :-)

[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 12:59 Uhr

gni
Posts: 1106
Nutzer
Zitat:
Der_Wanderer:
Wenn ich -llibdumb mache, bekomme ich einen Fehler: Datei nicht gefunden.

Bibliotheken gibt man mit -l<name> an, also in Deinem Fall -ldumb.
Zitat:
Die Datei libdumb.a habe ich ins Hauptverzeichnis/aktuelle Verzeichnis kopiert.
Da kann man sie ablegen.
Zitat:
Wo soll die Datei hin?
That depends. Was ist das für ein Compiler: native oder cross? Was ist das Target? Der Einfachheithalber nehme ich jetzt mal nativ m68-amigaos an. Dann könntest Du die Bibliothek nach gg:m68k-amigaos/lib kopieren oder nach gg:local/lib.
Zitat:
Oder wie sage ich GCC, wo er die Datei finden kann ?
Das macht man mit -L<Verzeichnis>, am besten mit UN*X Pfaden, aber Amigapfade gehen auch. Für das aktuelle Verzeichnis must Du -L. benutzen. Wenn Du die Datei in einem Standardverzeichnis hast, dann brauchst Du kein -L angeben.
Zitat:
Meine Frage war auch, ob ich überhaupt richtig denke, dass eine ".a" Datei eine vorkompiliertes Binary ist dass man dazu linken kann.
Es ist kein Binary (das impliziert doch ein ausführbares Programm) sondern einfach eine Linkerbibliothek, also eine Sammlung von Objektdateien.
Zitat:
Sorry, hab noch nicht viel mit GCC gemacht. Ich programmiere sonst nur unter VisualC++, dort ist alles ein wenig einfacher.
Ahem, ich finde den Umgang mit VC etwas komplizierter ;-)

[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 13:09 Uhr

gni
Posts: 1106
Nutzer
Zitat:
Der_Wanderer:
objdumb sage aber, dass es 68K wäre.

objdump ;)
Zitat:
ld libdumb.a dumb_funcs.o dumblib_init.o -noixemul -nostartfiles -lamiga
Bitte, bitte: auf keinen Fall so linken! _Immer_ das Frontend verwenden, wie immer es auch heisst. Das weiss viel besser wie gelinkt werden muß. Dein Versuch ist komplett falsch, zb. ist -noixemul ein Schalter für das Frontend, ld kennt das garnicht... Das selbe gilt auch für -nostartfiles. Also

<Frontend> <Schalter> <Objekte> <Bibliotheken>

ergibt

gcc -nostartfiles -noixemul -o prgname dumb_funcs.o dumblib_init.o -ldumb.

Bist Du im übrigen sicher, das Du wirklich ohne Startupcode auskommst? Das ist gerade bei m68k-amigaos schwierig, da der Compiler Konstanten und Strings _vor_ einer Funktion ablegt.

[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 13:10 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Die Datei gibts im Aminet:

http://us.aminet.net/pub/aminet/dev/lib/libdumb.readme

Ich Depp habe aber übersehen, dass es für OS4 kompiliert worden ist. :glow:

D.h. ich muss wohl den Source neu kompilieren. Das wollte ich vermeiden ...

BTW, die dumb lib ist eine Bibliothek zum Umwandeln von MOD in Audio.
Es werden sehr viele Formate unterstützt und die Qualität soll sehr gut sein. Ich wollte daraus eine .library machen, damit man das überall benutzen kann. Dadurch könnte man sehr leicht OS freundlichen Support für MODs in Amiblitz3 einbauen.
Evtl. hat ja jemand Lust dabei zu helfen.

--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 13:33 Uhr

Der_Wanderer
Posts: 1229
Nutzer
@gni

Es soll eine library werden. Deshalb denke ich brauche ich keinen Startup Code. Die Parameter habe ich von einem anderen Projekt abgeschaut, das libraries erzeugt.

Aber ich weiss jetzt das es PPC Code ist und deshalb nicht geht.

Jetzt versuche ich den Kompletten Source nochmal zu kompilieren.

Das makefile meckert, es findet sed und mv nicht. Sind das CLI Tools?
--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 14:07 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Ich habe jetzt (fast) alles Compilieren können.
Beim Linken bekomme ich aber noch massig unknown references.

Hautsächlich Dinge wie malloc, free, fopen etc.

Wie linke ich die dazu ?

-lamiga habe ich schon angegeben.

--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 14:20 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von Der_Wanderer:
Ich habe jetzt (fast) alles Compilieren können.
Beim Linken bekomme ich aber noch massig unknown references.

Hautsächlich Dinge wie malloc, free, fopen etc.

Wie linke ich die dazu ?

-lamiga habe ich schon angegeben.


Hmm *kopfkratz* wenn ich mich recht entsinne, gehören diese Funktionen zu denen, die beim vbcc in der posixlib vorhanden sind. Beim gcc wäre das Pendant dann wohl ixemul oder libnix. Da Du ohne ixemul kompilieren willst, würde ich es an Deiner Stelle mit der libnix probieren, also laut gni dann vermutlich -lnix beim Linken.

Grüße

--
---

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

[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 14:27 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Dann darf ich aber vermutlich auch nicht mit -noixemul compilieren, oder ?
-lnix wird nicht gefunden. Im Order GG:lib/libnix/ gibt es die aber. Evtl. muss ich noch den Pfad dazu etzen ?

--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 14:52 Uhr

gni
Posts: 1106
Nutzer
Zitat:
Der_Wanderer:
BTW, die dumb lib ist eine Bibliothek zum Umwandeln von MOD in Audio.
Es werden sehr viele Formate unterstützt und die Qualität soll sehr gut sein. Ich wollte daraus eine .library machen, damit man das überall benutzen kann.

Warum müssen "Anfänger" immer mit komplizierten Dingen beginnen? :-( Es ist nicht ohne weiteres möglich "normalen" Code in eine amiga shared Library zu packen. Da gibt es viele Fallen, auf die ich hier jetzt nicht eingehen werde.

[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 14:59 Uhr

gni
Posts: 1106
Nutzer
Zitat:
whose:
Zitat:
Der_Wanderer:
Hautsächlich Dinge wie malloc, free, fopen etc.

Hmm *kopfkratz* wenn ich mich recht entsinne, gehören diese Funktionen zu denen, die beim vbcc in der posixlib vorhanden sind.
Falsch erinnert! In der PosixLib sind sie unter Umständen auch drin, aber zu finden sind diese Funktionen in der vc.lib.
Zitat:
Da Du ohne ixemul kompilieren willst, würde ich es an Deiner Stelle mit der libnix probieren, also laut gni dann vermutlich -lnix beim Linken.
ja, so heißt die Bibliothek aber auch das muß man nicht wissen, wenn man das Frontend verwendet. Das kümmert sich um die Details. Soll heissen linke mit -noixemul und -nostartfiles. Das wird aber trotzdem in die Hose gehen, da diese neckischen Standardfunktionen den normalen Startupcode benötigen.

[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 15:03 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von gni:
Zitat:
whose:
Zitat:
Der_Wanderer:
Hautsächlich Dinge wie malloc, free, fopen etc.

Hmm *kopfkratz* wenn ich mich recht entsinne, gehören diese Funktionen zu denen, die beim vbcc in der posixlib vorhanden sind.
Falsch erinnert! In der PosixLib sind sie unter Umständen auch drin, aber zu finden sind diese Funktionen in der vc.lib.

Hmm auch fopen()? Ich frage so dumm, weil ich mich wirklich nur dunkel erinnere... ich hatte die zlib vor ein paar Wochen "mal eben" für den vbcc präpariert und mußte mir dann noch die posixlib besorgen, weil ich eben nicht fertig linken konnte. Und ich meine, das Problem wäre fopen & Co. gewesen. Kann aber auch gut sein, daß ich das falsch in Erinnerung habe. Ich habe mit diesen Funktionen eher selten zu tun.

Grüße

--
---

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

[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 15:05 Uhr

gni
Posts: 1106
Nutzer
Zitat:
Der_Wanderer:
Dann darf ich aber vermutlich auch nicht mit -noixemul compilieren, oder?

Bei m68k-amigaos macht es keinen Unterschied ob Du -noixemul auch beim Übersetzen verwendest, da sowohl libnix als auch ixemul die gleichen Header verwenden. Einziger Unnterschied sind vordefinierte Bezeichner ixemul für ixemul und libnix für -noixemul. Bei MOS ist das anders. Da muß man immer -noixemul angeben, wenn man libnix verwenden will.
Zitat:
-lnix wird nicht gefunden. Im Order GG:lib/libnix/ gibt es die aber. Evtl. muss ich noch den Pfad dazu etzen?
Nein. Du mußt nur das Frontend mit den richtigen Optionen verwenden, Siehe oben. Wie bereits gesagt, wird das nicht wirklich helfen, da malloc, free, fopen und Verwandte sich schlecht in shared libraries benutzen lassen.

[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 15:08 Uhr

gni
Posts: 1106
Nutzer
Zitat:
whose:
Hmm auch fopen() [in vc.lib]?

Vorallem das ;)
Zitat:
Ich frage so dumm, weil ich mich wirklich nur dunkel erinnere... ich hatte die zlib vor ein paar Wochen "mal eben" für den vbcc präpariert und mußte mir dann noch die posixlib besorgen, weil ich eben nicht fertig linken konnte. Und ich meine, das Problem wäre fopen & Co. gewesen. Kann aber auch gut sein, daß ich das falsch in Erinnerung habe. Ich habe mit diesen Funktionen eher selten zu tun.
Eventuell lag es an fdopen, das ist keine ANSI/ISO Funktion.

[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 15:08 Uhr

Der_Wanderer
Posts: 1229
Nutzer
@gni

Also diese lib ist extra als lib konzipiert, nicht als Amiga Shared lib, aber sie benutzt keine systemabhängigen Sachen, und der Code sollte re-entrant sein.

Aber so weit komme ich ja gar nicht.

Wie linkt ihr ein Program, das fopen, malloc etc. nutzt ?

--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 15:17 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von gni:
Zitat:
whose:
Hmm auch fopen() [in vc.lib]?

Vorallem das ;)

Ah, ok ;)

Zitat:
Zitat:
Ich frage so dumm, weil ich mich wirklich nur dunkel erinnere... ich hatte die zlib vor ein paar Wochen "mal eben" für den vbcc präpariert und mußte mir dann noch die posixlib besorgen, weil ich eben nicht fertig linken konnte. Und ich meine, das Problem wäre fopen & Co. gewesen. Kann aber auch gut sein, daß ich das falsch in Erinnerung habe. Ich habe mit diesen Funktionen eher selten zu tun.
Eventuell lag es an fdopen, das ist keine ANSI/ISO Funktion.

Jap, das wars.

@Der_Wanderer:

Für malloc() und Konsorten muß ich hier (vbcc) z.B. nur mit der vc.lib linken, darin sind die Funktionen der Standard-Bibliothek. Beim GCC weiß ich das gar nicht so genau, weil ich den nur extrem selten via Shell eingesetzt habe. Könnte aber libgcc oder so sein, da weiß gni aber wesentlich mehr drüber ;)

Grüße

--
---

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

[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 15:24 Uhr

gni
Posts: 1106
Nutzer
Zitat:
Der_Wanderer:
Also diese lib ist extra als lib konzipiert, nicht als Amiga Shared lib, aber sie benutzt keine systemabhängigen Sachen, und der Code sollte re-entrant sein.

Mit "Lib" ist auch nur einfach eine Linkerbibliothek gemeint.

Zitat:
Wie linkt ihr ein Program, das fopen, malloc etc. nutzt ?
gcc [-nixemul] -o mein_programm objekt1.o objekt2.o ...
Hier wird aber auch der normale Startupcode verwendet und solche Programme können auch ohne weiteres abnormal beendet werden (Stichwort exit, abort). Bei einer Amiga shared.library ist alles anders.

[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 16:00 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Ok, mit -nixemul und -nostartfiles kann ich alles zusammenlinken.
Das Ergebnis lässt sich aber nicht als library öffnen :-(
Irgendwas habe ich wohl noch falsch gemacht. Ich werde die lib Funktionalität mal mit ein paar Dummy funktionen testen.

--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 16:12 Uhr

Holger
Posts: 8090
Nutzer
Zitat:
Original von Der_Wanderer:
@gni

Also diese lib ist extra als lib konzipiert, nicht als Amiga Shared lib, aber sie benutzt keine systemabhängigen Sachen, und der Code sollte re-entrant sein.

Aber so weit komme ich ja gar nicht.

Wie linkt ihr ein Program, das fopen, malloc etc. nutzt ?

Das ist nicht die Frage, denn Du willst kein Programm linken, sondern eine Library. Und da lautet die einfache Antwort: gar nicht. Deine lib mag ja über sich selbst sagen, was sie will, re-entrant, gut und schön, aber die handelsüblichen Implementierungen von fopen, malloc, etc sind es nicht.

Außerdem sind die Einsprungpunkte einer Link-Library nicht automatisch als Amiga-Libraryfunktionen verfügbar, ein solchermaßen kompiliertes Binary wäre komplett nutzlos.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 16:18 Uhr

Holger
Posts: 8090
Nutzer
Zitat:
Original von Der_Wanderer:
Ok, mit -nixemul und -nostartfiles kann ich alles zusammenlinken.
Das Ergebnis lässt sich aber nicht als library öffnen :-(

Natürlich nicht, es ist ja keine. Du hast ein Programm erzeugt.
Zitat:
Irgendwas habe ich wohl noch falsch gemacht.
Hast Du Dich schon mal damit beschäftigt, wie eine Amiga-Library überhaupt funktioniert?

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 16:20 Uhr

Der_Wanderer
Posts: 1229
Nutzer
> Außerdem sind die Einsprungpunkte einer Link-Library nicht automatisch als Amiga-Libraryfunktionen verfügbar, ein solchermaßen kompiliertes Binary wäre komplett nutzlos.
Das ist mir klar. Ich schreibe auch nicht zum ersten mal eine Library. Den Function-Table etc. habe ich aufgestellt und Wrapper Funktionen geschrieben, die dann die Funktionen aus dem Dumblib Sourcecode/.a File aufrufen.


--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 16:24 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Dann formuliere ich meine Frage anders:

Wie würdet ihr vorgehen, um dieses "dumb" Biest in eine library zu verwandeln?

Das Grüst einer Library habe ich bereits. Ich brauche auch nicht alle Funktionen der dumb lib, sondern nur eine handvoll, die ich als C Funktionen eingepackt habe.


--
Thilo Köhler, Author von:
HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

20.02.2007, 16:37 Uhr

Holger
Posts: 8090
Nutzer
Zitat:
Original von Der_Wanderer:
Das ist mir klar. Ich schreibe auch nicht zum ersten mal eine Library. Den Function-Table etc. habe ich aufgestellt und Wrapper Funktionen geschrieben, die dann die Funktionen aus dem Dumblib Sourcecode/.a File aufrufen.

Lass mich mal so fragen: wenn die Wrapper-Funktionen statt der dumplib-Funktionen nichts aufrufen würden, kannst Du dann eine funktionierende Amiga-Library aus Deinem Grundgerüst erzeugen?

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]


-1- 2 [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Anfängerfrage: Wie linke ich eine .a Datei ? [ - Suche - Neue Beiträge - Registrieren - Login - ]


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