Linker Frage zu gleichnamigen Klassen in zwei libs



  • Hallo,

    angenommen ich habe zwei statische Bibliotheken LibA und LibB, die beide eine Klasse Test mit der Methode test enthalten (identische Signaturen). Wie wird in folgendem Code dann festgestellt, welche Klasse instanziiert wird?

    #include "LibA/test.h"
    #include "LibB/test.h"
    
    int main()
    {
       Test t;
       t.test();
    }
    

    Ich bin der Meinung, dass der Linker willkürlich den ersten Treffer benutzt, den er findet, was z.B. von der Einstellung der Linkerpfade abhängen kann
    Oder liege ich da völlig falsch und es gibt eine Regelung für diese Situation?



  • Das dürftest du doch noch nicht mal kompiliert kriegen (wg. doppelter Definitionen), oder?



  • _matze schrieb:

    Das dürftest du doch noch nicht mal kompiliert kriegen (wg. doppelter Definitionen), oder?

    Ja das dürfte probleme geben



  • Wurden dafür nicht namespaces erfunden? 😕



  • peso schrieb:

    Wurden dafür nicht namespaces erfunden? 😕

    Ja, aber das war nicht die Frage. 😉



  • Hm, sagen wir mal so, ich habe einen kleinen Disput mit Arbeitskollegen 😉

    In meinem Fall erstelle ich eine statische lib, die von meiner Anwendung und der Anwendung eines Arbeitskollegen benötigt wird. In dieser statischen Lib sind Klassen eines Dritten enthalten, die auch in der Anwendung des Kollegen benötigt werden. Mein Vorschlag war nun, die Quelltexte des Dritten in eine eigene Lib auszulagern, gegen die beide Anwendungen gelinkt werden => Quelltext zentral an einer Stelle.
    Das möchte mein Kollege aber nicht, da er im Notfall zum Debuggen in den Quelltext gucken möchte.
    Im Moment sieht´s also so aus, dass TestClass.cpp (Name von der Redaktion geändert) Bestandteil meiner statischen Lib und des Projektes meines Kollegen ist => Codedubletten in meiner Lib + Anwendung des Kollegen.
    Und ich frage mich jetzt, was der Linker denn wohl benutzt, den er läuft ohne zu murren durch.

    Edit:
    Probleme gibt es wohl deswegen nicht, weil beide Header Dateien identische Include Guards benutzen. Hab´s mal mit unterschiedlichen probiert und da weigert sich der Compiler tatsächlich.



  • Das möchte mein Kollege aber nicht, da er im Notfall zum Debuggen in den Quelltext gucken möchte.

    Was hat A mit B zu tun. Er kann ja eine Lib mit Debuginformationen erstellen und gegen die linken.



  • Klar. Er kann sogar die Quelltexte vom SVN Server holen und das komplette lib Projekt in seine Projektgruppe aufnehmen. Er sträubt sich halt nur mit Händen und Füßen gegen die "Wegnahme" seiner Quelltextdateien.

    Kollege schrieb:

    "Das haben wir früher so gemacht, da gab´s nur Probleme. Seit wir Quelltexte austauschen klappt alles viel besser."


Log in to reply