Forum: Compiler & IDEs GCC Library Suchpfad?


von Tobias P. (hubertus)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Tobias P. (hubertus)


Lesenswert?

Hallo Jörg,

danke. Es hat funktioniert.
Was habe ich gemacht? einfach die C-Library im Ornder lib ablegen, dann 
funktioniert es. :-)

Gruss Tobias

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.