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
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.
@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).
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.
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 ...
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
@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...
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
@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 ...
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.