Zwei gleich heißende Funktionen aus zwei library's nutzen



  • Hi ich habe zwei shared library's die beide jeweils eine gleich heißende Funktion beinhalten. Nun will ich die beiben library's/Funktionen in einem Programm nutzen ohne die library's zu ändern. Kann mir einer sagen wie bzw. ob das unter c++ geht.

    (Ich hoffe ich habe das richtige Forum erwischt)

    gruß nichtweise



  • das wird mit normalem linken nicht möglich sein, da der funktionsname der schlüssel zum auffinden der richtigen funktion ist. die einzige lösung, die ich mir vorstellen kann, ist, dass du die bibliotheken dynamisch lädst mit dlopen() und dann per dlsym() beide funktion herausholst.



  • Wenn die Funktionen zwar den selben (Klartext)Namen, aber unterschiedliche Parameter haben (und mindestens eine der Bibliotheken von einem C++ Compiler übersetzt wurde), dürfte das kein Problem sein - Überladung macht's möglich. Wenn beide Funktionen den selben dekorierten Namen haben (der Compiler ergänzt die Funktionsnamen um einige kryptisch codierte Typ-Informationen, um Überladungen auflösen zu können), mußt du wohl eine Zwischenstufe einführen, um einer der Funktionen einen anderen Namen geben zu können.



  • was verstehst du unter zwischenstufe? er will/kann die bibliotheken nicht ändern.



  • namenlos schrieb:

    was verstehst du unter zwischenstufe? er will/kann die bibliotheken nicht ändern.

    Eine eigene Library, die die betroffene Funktion auf einen neuen Namen umleitet:

    //Prinziplösung
    
    //wrapper.h
    int Lib1_Func1(...);
    ...
    
    //wrapper.cpp
    #include "wrapper.h"
    #include "lib1.h"
    
    int Lib1_Func1(...)
    {
      return Func1(...);
    }
    

Log in to reply