Forum: Compiler & IDEs GCC options --direct-data und -static


von Moritz E. (devmo)


Lesenswert?

Hallo, ich versuch gerade nachzuvollziehen, was das AVR32 Studio beim 
build macht.

Einige Option hab ich im GCC Manual nicht gefunden:
Unter AVR32/GNU C Linker ist standardmäßig u.a. folgende option 
angeführt:

-Wl, --direct-data

Was tut diese Option? Sie korrespondiert offenbar mit einer anklickbaren 
Option "Allows direct references to the data section".

Kann es sein, dass das mit vorcompilierten Library aufrufen zu tun hat?

Ich kämpfe zur Zeit mit dem Problem beim Debuggen, das bestimmte 
Funktionsaufrufe von Beispielprojekten in den Sourcen garnicht findbar 
sind. Ich würde gerne allen Quellcode von den benutzten und vermutlich 
erst vom Linker evtl als vorcompilierte Dateien eingebundenen Librarys 
fürs Debugen vorhanden haben. Dazu müsste ich die Standardlibs alle 
raushauen mit -nostdlib, -nodefaultlibs, -nostartfiles etc, und dann 
stattdessen die Source-Dateien explizit angeben oder? Wie sagt man dann 
dem Linker/Compiler, das er auf vorcompiliertes Zeug verzichten soll?

Ferner hat evtl -static = "No shared libraries" etwas damit zutun. Was 
ist eine shared library?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Moritz E. wrote:

> Einige Option hab ich im GCC Manual nicht gefunden:
> Unter AVR32/GNU C Linker ist standardmäßig u.a. folgende option
> angeführt:
>
> -Wl, --direct-data

-Wl leitet die Option nur an den Linker weiter. Dokumentiert ist 
--direct-data also nicht in gcc, sondern in binutils, zB ld oder 
avr32-ld.

von Moritz E. (devmo)


Lesenswert?

Achso, danke..

Und der unterschied zwischen static und shared?

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


Lesenswert?

Moritz E. wrote:

> Was
> ist eine shared library?

Gugeln sollte dir da sicher helfen.  Kurz: eine Bibliothek, die
vorgelinkt ist und die zur Laufzeit in den VM-Adressraum der
Applikation reingemappt wird (mit mmap()).  Die Idee dahinter (daher
shared library) ist, dass mehrere Applikationen den Code gleichzeitig
nutzen können.

Wenn du von Windows kommst, kennst du sowas als DLL.

von Rolf Magnus (Gast)


Lesenswert?

Naja.. static benutzt statische Libraries, shared eben stattdessen 
shared libs.

> Was ist eine shared library?

Eine, die erst beim Programmstart dynamisch ans Programm gelinkt wird.

von Moritz E. (devmo)


Lesenswert?

Dann handelt es sich bei den standardlibs wohl um static libraries... 
und -static würde keinen untersched machen

zu "--direct-data" habe ich beim ld manual nichts gefunden, mit avr32-ld 
--help erfahre ich auch nicht mehr als "Allow direct data references 
when optimizing". Was ist unter "direct data reference" zu verstehen?

von (prx) A. K. (prx)


Lesenswert?


von Moritz E. (devmo)


Lesenswert?

ok ich hab google nur mit +"--direct-data" gefüttert, und dann 
aufgegeben...

von Tilo (Gast)


Lesenswert?

Zum fehlendem Code beim Debuggen:

Das habe ich mit gnuarm und Eclipse auch, wenn Funktionen aus der Newlib 
verwendet werden. Ich habe mir dadurch geholfen, in dem ich den 
entsprechenden Quellcode aus den Source-Paketen hinzufügte.

von Moritz E. (devmo)


Lesenswert?

Das Newlib zeug hab ich bisher nur als objektfiles gefunden, wo hast du 
denn da sourcecode aufgetrieben?

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.