GCC Library Suchpfad?

#3092872
Lesenswert?

Hallo,

ich habe erst vor kurzem einmal den ARM none eabi GCC runtergeladen von 
hier:

https://launchpad.net/gcc-arm-embedded/+download

Ich benutze Linux, daher habe ich das entsprechende .tar.bz2 genommen 
und entpackt (nach opt). Die Toolchain funktioniert bestens; man kann 
sogar ein Makefile von den Yagarto-Examples nehmen, und das Projekt wird 
erfolgreich und fehlerfrei compiliert.

Nun habe ich dazu Frage 1:
Wenn man printf() benutzt - wo geht der Output dann hin? Kriege ich 
irgendwo einen Callback oder sowas?


Dann Frage 2: Nun möchte ich noch was mit einem Blackfin programmieren. 
Ich habe ein fertiges Board, wo uCLinux drauf läuft. Als SDK zu dem 
Board kriegt man ein Image, das man in VirtualBox auf dem PC einbiden 
kann, wo ein Linux gebootet wird und die Toolchain bereits eingerichtet 
ist. Da ich nun aber schon normalerweise auf Linux arbeite, wäre es 
schön, wenn ich mir die VM ersparen könnte. Kurz und gut also: ich lade 
mir die bfin-uclinux-gcc Toolchain herunter (.tar.bz2 wie gehabt) und 
entpacke sie nach opt. Leider scheint bei dem GCC die C-Library nicht 
dabei zu sein: ein Hello world lässt sich nicht compilieren mit 
bfin-uclinuc-gcc, mit arm-none-eabi-gcc geht es aber! Die Frage ist: wo 
muss ich die Blackfin C-Library ablegen, damit der bfin-gcc diese 
findet? Interessanterweise musste ich bei der arm-none-eabi Toolchain 
überhaupt nichts einrichten, das hat 'out of the box' funktioniert, 
müsste bei Blackfin also auch möglich sein.

Gruss
Moderator Persönliche Seite #3093003
Lesenswert?

Tobias Plüss schrieb:

> Wenn man printf() benutzt - wo geht der Output dann hin?

Das hängt von der mitgelieferten C-Bibliothek ab.  Ich geh' mal davon
aus, dass es sich um eine newlib handelt.  Diese implementiert das
Unix-Modell, sodass du die zugehörigen Unix-Syscalls selbst in deiner
Applikation liefern musst.  Das ist für printf() in erster Linie ein
write(), aber vermutlich wird stdio für die Pufferung der Daten
außerdem mindestens noch eine Implementierung von sbrk() benötigen.
Dies fordert eine Vergrößerung des Datensegments an (normalerweise
vom Betriebssystem, aber du musst hier halt so tun als ob) und stellt
die Basis für malloc() dar.

Beispiele dafür solltest du im Netz finden.

> Die Frage ist: wo
> muss ich die Blackfin C-Library ablegen, damit der bfin-gcc diese
> findet? Interessanterweise musste ich bei der arm-none-eabi Toolchain
> überhaupt nichts einrichten, das hat 'out of the box' funktioniert,

Der Bibliothekspfad wird normalerweise beim Aufruf des ./configure
beim Compilieren des GCC abgeleitet aus dem dort angegebenen
Installationspräfix.

Wenn du den Compiler mal mit -v aufrufst, dann zeigt er dir die
einzelnen Backend-Aufrufe einschließlich der benutzten Pfade.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren