Library erstellen die eine Library nutzt

melmager

Erfahrenes Mitglied
Mal sehen ob mir einer weiterhelfen kann :-)

Eine Library (eine shared) zu erstellen habe ich ja schon hinbekommen :-)
jetzt muss ich von meinem C Programm das nachher zur Library wird eine andere shared Library
benutzen - wie macht man das ?

ich nutze gcc trotzdem bin ich auch für Tips dankbar die ander Compiler betreffen
ev hilft mir das ja auch weiter
 
Also shared Libs verwendest du unter Windows mit LoadLibrary() oder unter UNIX mit dlopen().
Oder verstehe ich hier jetzt was falsch?

Gruß Homer
 
Jo es gibt 3 Library Arten :-(
statisch; shared und dynamisch und dlopen nutzt man bei dynamischen
Ich habe mir mal gestern ein Howto runtergeladen nur meine Fall wird dort nicht
behandelt
Ich bekomme meine Libaray ja fehlerfrei übersetzt, nur er springt in dem Teil wo ich die andre Library
nutzte ins Nirwana :-(
mache ich ein printf rein zur Kontrolle, statt dem Aufruf der anderen Libraryfunction geht es
 
also gegeben ist ein ctapi.so shared Library die einige Schnittstellen zur Verfügung stellt
und ich möchte eine Library erstellen die ein paar Anpassungen macht

Programm > meineLib > Herstellerlib

um mein Problem ist das ich weiss wie ich dem Compiler kann das er die Herstellerlib
einbinden soll.
Vermutlich geht das auch nicht - werde wohl alles in ein Verzeichnis packen müssen
und eine komplette neue Library erstellen müssen :-(
 
Das Programm ist das auch von dir? Wenn ja, dann sagst du in deinem Programm ja bestimmt, das du mit dlopen() deine lib lädst mit dlsym() holst du dir ja einen Funktionszeiger auf eine Funktion.
Also wenn ich dich richtig verstehe möchtest du deine Lib einfach dazwischen hängen, zwischen deinem Executable-Programm und der Herstellerlib, oder?

Also müsstest du die Funktionen ja gleich benennen zb.
Programm:
Code:
int main(int argc, char** argv)
{
   #include <dlfcn.h>
   int (myFunc*)(int);  //funktionszeiger
   void* handle
   handle = dlopen("mylib.so", RTLD_LAZY);
   myFunc = dlsym(handle, "myFunction);
   // aufruf
   int ret = myFunc(42);
   dlclose(handle);
   return 0;
}

Deine mylib.so:
Code:
#include <dlfcn.h>

int MyFunction(int param)
{
   // vorbehandlung ....

   int (myFunc*)(int);  //funktionszeiger
   void * handle;
   dlopen("ctapi.so", RTLD_LAZY);
   myFunc = dlsym(handle, "myFunction);
    
   // aufruf der lib des Herstellers
   int ret = myFunc(param+99);
   dlclose(handle);
   // nachbehandlung
   
   return ret;
   
}


So das ganze ist jetzt nix anderes als eine dazwischengeschaltete lib.

Gruß Homer
 
Zurück