Funktionen aus Object files statt aus Libs bevorzugen

OP #1418366
Hallo,

wie kann man dem Linker mitteilen, dass er bei Funktionen, die sowohl in 
der per Kommandozeile übergebenen .o-Datei als auch in einer 
dazugelinkten .a-Library die Funktion aus der .o nehmen und die aus der 
Lib ignorieren soll?

Bei mir kommt ständig der Fehler
1
d:/programme/codesourcery/sourcery g++ lite/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3\libgui.a(window.o): In function `Window::Paint()':
2
window.cpp:(.text+0x6d8): multiple definition of `Window::Paint()'
3
obj\Release\server_window.o:server_window.cpp:(.text+0x12c): first defined here

MfG Mark
OP #1418829
Erstmal danke für die Hilfe, Johann.

Jetzt meckert der Linker zwar nicht mehr bei Funktionen, dafür aber bei 
der vtable einer Klasse, weil diese ebenfalls doppelt vorhanden ist. 
Wenn man die Klasse selbst mit __attribute__((weak)) versieht, ändert 
sich nichts.

Gibt es eine Möglichkeit, auch die vtable 'weak' zu machen?

MfG Mark
Persönliche Seite #1419009
hmmm

mich dünkt das geht hier in die falsche Richtung --> Hack.

Warum nicht einfach die Klasse aus der Lib ableiten und die Funktionen 
überschreiben, die nicht das machen, was sie sollen.

Über die gcc-Innereien von vtable kann ich auch net weiterhelfen, evtl 
nach .gnu.linkonce.* per ld-Skript. Sieht aber wie gesagt nach Hack aus.

Johann
Moderator Persönliche Seite #1419141
Mark P. schrieb:

> wie kann man dem Linker mitteilen, dass er bei Funktionen, die sowohl in
> der per Kommandozeile übergebenen .o-Datei als auch in einer
> dazugelinkten .a-Library die Funktion aus der .o nehmen und die aus der
> Lib ignorieren soll?

Genau das macht der Linker übrigens.  Allerdings musst du natürlich
zuerst alle .o-Dateien auf der Kommandozeile angeben, erst danach
irgendwelche Bibliotheken.  Andernfalls könnte es passieren, dass er
schon Module aus Bibliotheken entnimmt, um andere Referenzen
aufzulösen, bevor er mit der Verarbeitung aller .o-Dateien fertig
ist.
OP #1419561
@Jörg

In bei mir wird die Lib als letztes übergeben, also nach allen 
.o-Dateien.

>Andernfalls könnte es passieren, dass er
>schon Module aus Bibliotheken entnimmt, um andere Referenzen
>aufzulösen, bevor er mit der Verarbeitung aller .o-Dateien fertig
>ist.

Ich glaub genau das ist der Fall. Die meisten Funktionen aus den 
Object-Files werwenden Funktionen aus der Lib.

Ist jetzt aber eh egal, da die Ableitung der Klasse einen viel 
eleganteren Weg darstellt.

MfG Mark

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.