Funktionen aus Object files statt aus Libs bevorzugen

OP #1418366
Lesenswert?

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
Lesenswert?

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
Moderator Persönliche Seite #1419141
Lesenswert?

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
Lesenswert?

@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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren