object nur hinzugelinkt : blödsinn entsteht!

OP #1022240
Hi, ich brauch hilfe ...

ich linke ein compiliertes modul zu einem bereits bestehendem projekt 
hinzu und das gesamte programm macht nichtmehr was es machen soll, ob 
wohl ersteinmal testweise überhaupt kein aufruf der funktionen in dem 
neu hinzugefügten modul aus dem programm vorhanden sind ( auch keine IRQ 
in dem neuen Modul).

was  ist dort schief gelaufen ??   ich mein eig. dürfte der code des 
neuen moduls ja nie ausgeführt werden wenn ich ihn nicht aus dem 
programm aufrufe oder ??


_
atmega2561 mit avr gcc
Gast #1022308
Naja, wenn Du z.B. globale Variabeln mit gleichem Namen hast, dann denkt 
sich der Linker sicher, dass es wohl dasselbe ist und verweist auf 
denselben Speicherplatz...
Mann muss bei solchen Spässen schon wissen was man tut.
OP #1022340
hmm,

naja solange ich nicht mit extern *****   draufzugreife dürfte ich doch 
sogar gleiche Var.-bezeichner verwenden können ...  der 
gültigkeitsbereich beschränkt ishc doch immer auf die Quellcodedatei 
bzw. dann das Objekt ...


na ich kontrollier mal ... vielleicht find ich ja was doppeltes
Gast #1022366
>der gültigkeitsbereich beschränkt ishc doch immer auf die
>Quellcodedatei bzw. dann das Objekt ...

Nur wenn diese Variablen als 'static' deklariert wurden.
Das Schlüsselwort 'extern' dient nur zur Information des Compilers
das es so eine Variable gibt. Alles andere macht der Linker.
Der fasst globale Objekte mit gleichen Namen zu einem zusammen.

Das mag aber auch vom verwendeten Compiler abhängen. Ich meine
mal gelesen zu haben das sich Windows-compiler bei diesen
'multiple commons' anders verhalten. Der gcc ist kein solcher Compiler.
Gast #1022429
Wenn das neue Modul tatsächlich nicht benutzt wird dürfte
der Linker es erst gar nicht zum Binary linken.
Du könntest mal versuchen -ffunction-sections und -fdata-sections
dem Compiler und -gc-sections dem Linker als Optionen zu geben.
Dann wird alles was nicht gebraucht wird rausgeschmissen.

Wenn sich die Größe des Binaries dennoch erhöht kannst du noch
-Wl,-Map=target.map,--cref
den LDFLAGS hinzufügen (falls nicht schon der Fall).
Dann im Mapfile (target.map) unter 'Cross Reference Table' nachsehen
welche Funktion/Variable von welchem Modul verwendet wird.
Vielleicht findest du dort einige Ungereimtheiten.
OP #1022468
jojo , danke schonmal ...

aber geht trotzdem noch nicht ...  also in dem C-Ref.-Tab.  steht hinter 
den Funktionen des moduls auch nur dieses modul-Objekt ...

also müsste  keine externer code die funktionen aufrufen ...


trotz den neuen comp./linker -options  stehen aber weiterhin diese 
funktionen in der map-datei...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.