Einsteiger: Mehrfachdefinition bei Libraryentwicklung



  • Hallo zusammen,

    ich bin neu in der c++-Entwicklung. Ich habe den Einstieg mittels des c++ Wikibooks gemacht und komme damit ganz gut voran.
    Mein Hauptinteresse liegt in der der Programmierung/Erweiterung einer bestehenden c++ Library (www.openfoam.org).
    Ich habe schon erfolgreich einige Anwendungen mit der Library entwickelt.
    Nun möchte ich die Funktionalität einer bestehenden Library aus dem Paket um eigene Funktionalität erweitern. Ich habe daszu eine eigene Library erzeugt, die im wesentlichen aus einer zusätzlichen Klasse besteht. Nun laufe ich in das Problem, dass ich beim Linken meiner Library gegen das Paket Mehrfachdefinitionen habe und mir ist nicht klar, wieso. Wie kann ich den Fehler eingrenzen? Ich habe mich an den Stil gehhalten und die Methoden meiner Klasse im Header deklariert und im .c-File dann definert. Bin für Tipps zum weiteren Vorgehen dankbar.

    Danke BastiL



  • Beziehen sich die Linkerfehler auf Entitäten deines Codes oder auf die bestehende Bibliothek? Normalerweise wird ja auch angegeben, welche Funktionen, Variablen oder Klassen mehrfach definiert sind.



  • Hmm das weiss ich nicht so genau. Ich bekomme vom Linker das Folgende
    zurück:

    ... das kann ich nicht einfügen weil hier nicht mehr als 10 Smilies erlaubt sind? Wie kann ich das umgehen?
    

    Für mich sieht das so aus, als ob folgende Funktionen mehrfach definiert
    wären:

    Foam::autoFeatureDriver::typeName: Habe ich gar nicht definiert
    Foam::autoFeatureDriver::debug: Habe ich auch nicht definiert
    Foam::autoFeatureDriver::autoFeatureDriver: Das ist der Konstruktor
    meiner Klasse
    Foam::autoFeatureDriver::doFeatures: Ist eine Methode meiner Klasse
    Foam::autoFeatureDriver::featureEdgeProject: Eine weitere Methode meiner
    Klasse

    Im Moment tun die Methoden nicht mehr als eine Info ausgeben. Mit den
    zusätzlichen Infos "first defined here" fange ich leider gar nichts an,
    auch wenn das wohl als Hilfe gedacht ist?

    Danke.

    Edit: Es sieht als so aus, als ob Mehrfachdefinitionen teils von der Library und teils von mir kommen. Die Ausgabe des Linkers kann ich hier leider nicht posten, weil sie mehr als 10 Smileis enthält?? Aber ich schicke Sie gerne zu.



  • Eine Linker-Medlung sieht beispielhaft so aus:

    autoFeatureDriver.o:(.bss+0x0): multiple definition of
    `Foam::autoFeatureDriver::typeName'
    autoFeatureDriver.o:(.bss+0x0): first defined here
    autoFeatureDriver.o:(.bss+0x8): multiple definition of
    `Foam::autoFeatureDriver::debug'
    autoFeatureDriver.o:(.bss+0x8): first defined here
    autoFeatureDriver.o: In function
    `Foam::autoFeatureDriver::autoFeatureDriver(Foam::fvMesh&,
    Foam::meshRefinement&, Foam::decompositionMethod&,
    Foam::fvMeshDistribute&, Foam::List<int> const&)':
    

    Was kann ich daraus lernen? Danke.


Log in to reply