Forum: Compiler & IDEs Linker LD Optimierung


von Oryx (Gast)


Lesenswert?

Hallo,

welche Möglichkeiten gibt es, die Ausgabedatei mit dem GNU Linker LD zu
optimieren.

Hintergrund:
Einige Dateien werden von mehreren Compilern compiliert. In diesen
Dateien befinden sich aber Funktionen, die in einzelnen Projekten
garnicht gebraucht werden. Wegen den Übersichtlichkeit möchte ich diese
Dateien aber auch nicht auseinander nehmen. Auch das Copy und Paste in
die einzelnen Projekte kann nicht die Lösung sein.

Kann ich das über Bibliotheken machen?
Wie findet der Linker heraus, welche Funktionen benötigt werden?

In der Dokumentation habe ich leider nichts passendes gefunden.

Oryx

von Jörg Wunsch (Gast)


Lesenswert?

Der Linker lädt objektmodulweise, d. h. letztlich wird alles, was in
einer C-Datei war, gemeinsam gelinkt.  Aus einer Bibliothek wird es
immer dann gelinkt, wenn der Objektmodul wenigstens eine noch offene
Referenz befriedigt, also ein bislang unbekanntes Symbol (globale
Funktion oder Variable) davon abgedeckt wird.

Du mußt also Deine Quellen so auseinandernehmen, daß Du (im
Wesentlichen) eine Funktion pro Datei hast.  Die compilierst Du dann
einzeln, und machst aus den Objektdateien eine Bibliothek.  Beim
Linken wird dann nur noch die Bibliothek angegeben.

So in dieser Art ist auch die avr-libc selbst aufgebaut.

von Bertolt Mildner (Gast)


Lesenswert?

@Jörg:

Ja, leider ist das so!

Ich halte das allerdings für eine Krankheit des GNU Linkers (und leider
der meisten anderen, egal für welches Target) die endlich kuriert
werden sollte!

Ein schönes Beispiel wie man es besser machen kann sind die Linker von
Metrowerks (zumindest die für Win32/MacOS).

von Jörg Wunsch (Gast)


Lesenswert?

Wie man's nimmt.  Prinzipiell kann GCC und GNU ld das durchaus (auch
wenn's wohl in der gegenwärtigen Konfiguration für das avr-Target
nicht funktioniert), aber ich halte derartige Automatismen für weniger
wünschenswert.  Sie neigen viel stärker dazu, daß man die Kontrolle
darüber verliert, was eigentlich passiert beim Linken.  Welchen
Vorteil hast Du von so 'nem Automatismus denn wirklich?  Worin
besteht
das Problem, ein Dutzend Quelldateien zu verwalten, kann Dein Editor
sowas nicht?

Interessanterweise stört das Leute, die mit diesen Tools riesige
Bibliotheken verwalten, die aus hunderten von Quelldateien bestehen,
eher weniger, während ich das in der AVR-Ecke schon ein paarmal gehört
habe.

von Bertolt Mildner (Gast)


Lesenswert?

Was soll daran nicht wünschenswert sein?

Welche Nachteile würde so ein Automatismus haben?
IMHO keine!

[X] Du hast Angst vor zu schlauen Tools. ;-))

Im übrigen halte ich genau garnichts davon jede Funktion in ein eigenes
File zu packen. Es fördert die Übersicht nicht im geringsten, und files
hab ich auch so schon mehr als genug!

Ich sehe einfach nicht ein warum ich mich, zu meinem Nachteil, an die
Krankheiten der Tools anpassen soll, wenn es auch anders gehen würde.

Früher soll es mal Leute gegeben haben die der Meineung waren dass der
Computer dem Menschen dienen soll, und nicht der Mensch dem Computer!?
:(

Im übrigen finde ich macht es einen gewaltigen unterschied ob ich
Software für den PC oder einen MC schreibe.
Auf MCs ist Speicher immer knapp und teuer, am PC sind die 20% toter
Code einfach nur egal.

Ich möchte nicht wissen wie viel Prozent der Executables auf einem
durschnittlichen PC auf toten Code entfallen ...

von Oryx (Gast)


Lesenswert?

Hallo,

also bei mir ist das so:
Ich habe eine Datei mit diversen Konvertern. Teilweise mit Templates
usw.
Auf meinem H8 Controller ist das auch nicht so wild. Aber bei einem AVR
(2313) ist es schon entscheident, wenn ein paar Funktionen zuviel
eingebunden werden.
Zugegeben, alles in eine Datei ist schon etwas bequem.
Ich habe halt noch 100 andere Dateien, die H-Dateien nicht mitgezählt.
Das können mein Kopf und meine Tools auch verarbeiten.

Wenn ich jetzt aber ein Kleinprojekt mit dem AVR mache. Kann ich meinen
Quellcode halt nicht besonders gut weiterverwenden. Aber gerade dies
soll ja der Sinn von C und C++ sein.

Nach meiner Meinung kann man ruhig alles, was zusammengehört, auch in
eine Datei packen. Ich kann auch nicht erkennen, wo man beim Linken den
Überblick verlieren sollte.

Der Linker kann ja ruhig melden, was er nicht mitlinkt. Oder durch
Parameter gesteuert. Aber tote Funktionen machen wenig Sinn.

Oryx

von OldBug (Gast)


Lesenswert?

@Bertolt Mildner:
>Im übrigen halte ich genau garnichts davon jede Funktion in ein
eigenes
>File zu packen. Es fördert die Übersicht nicht im geringsten, und
files
>hab ich auch so schon mehr als genug!

>Ich sehe einfach nicht ein warum ich mich, zu meinem Nachteil, an die
>Krankheiten der Tools anpassen soll, wenn es auch anders gehen würde.

Naja, keiner zwingt Dich die GNU-Tools zu verwenden!

>Im übrigen finde ich macht es einen gewaltigen unterschied ob ich
>Software für den PC oder einen MC schreibe.
>Auf MCs ist Speicher immer knapp und teuer, am PC sind die 20% toter
>Code einfach nur egal.

Du sollst die Files ja auch nicht auf dem mikrocontroller ablegen,
sondern auf dem PC.

Ich versteh das Gemosere nicht...

@Jörg:
Tolle Sachen, die ihr da der Allgemeinheit bereit stellt! Vielen Dank
für so viel Arbeit, ohne die wir alle sehr viel weniger Spaß am Hobby
und manche sogar an ihrem Beruf hätten.

Gruß,
Patrick...

von Oryx (Gast)


Lesenswert?

Hallo OldBug,

also mit gemosere hat diese Diskussion garnichts zu tun. Wenn sich ein
Compiler solchen Diskussionen stellen muß, ist er schon sehr gut. Das
ist auch garnicht die Frage.
Es geht darum, ein gutes Produkt weiter zu verbessern. Oder die eigenen
Fehler zu erkennen, um dann das Problem zu umgehen bzw. zu beheben.


Oryx

von Bertolt Mildner (Gast)


Lesenswert?

@OldBug:

Also das letzt was ich wollte war Jörg anzugreifen! Im übrigen kann er
auch nichts für den GNU Linker bzw. dessen Schwächen!

Um was es mir geht ist das es offenbar eine menge Leute gibt die
einfach nicht sehen (wollen?) dass es da ein fehlendes Feature gibt
das

a.) besonders bei MCs von bedeutung ist

und

b.) offensichtlich auch machbar ist.

Nein, ich erwarte jetzt sicher nicht dass Jörg nen neuen Linker aus dem
Arm schüttelt ...

von OldBug (Gast)


Lesenswert?

Nagut, dann nehm ich alles zurück und behaupte das Gegenteil :-)

Nein, quatsch!
Warum besonders bei MCs? das ist da genau so wichtig wie überall
anders! Man muss sich halt an gewisse Regeln halten.
Mir macht der Linker auch grad Probleme, aber nicht, weil er zu viel in
das Binary reinpackt, sondern VIEL zu wenig...

Gruß,
Patrick...

von Oryx (Gast)


Lesenswert?

Hallo,
ich habe gerade die neuen Features des GCC 3.4 gelesen. Habe ich das
richtig verstanden, der Linker soll jetzt unbenutzte Funktionen
wegoptimieren?

Hoffentlich klapt das auch bei den Controllern.

Dann wäre der Service bei Open Source wirklich super, vor 2 Wochen
angefragt, jetzt angekündig und in 2 bis 3 Monaten fetig.

Oryx

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.