# Library erstellen die eine Library nutzt



## melmager (25. Oktober 2004)

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


----------



## Daniel Toplak (25. Oktober 2004)

Also shared Libs verwendest du unter Windows mit LoadLibrary() oder unter UNIX mit dlopen().
Oder verstehe ich hier jetzt was falsch?

Gruß Homer


----------



## melmager (26. Oktober 2004)

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


----------



## Daniel Toplak (26. Oktober 2004)

Also so ganz bin ich daraus noch nicht schlau geworden, erklär mal genauer was du machen willst, evtl.

Gruß Homer


----------



## melmager (26. Oktober 2004)

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 :-(


----------



## Daniel Toplak (27. Oktober 2004)

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:

```
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:

```
#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


----------

