shared object (.so) dynamisch nachladen

Dieses Thema im Forum "C/C++" wurde erstellt von kale1990, 14.10.2010.

  1. #1 kale1990, 14.10.2010
    kale1990

    kale1990 Jungspund

    Dabei seit:
    11.05.2007
    Beiträge:
    17
    Zustimmungen:
    0
    hallo zusammen,

    ich habe ein shared-object (.so) und möchte das in mein executable so mit hineinlinken, dass es erst geladen wird wenn eine funktion aus diesem shared-object aufgerufen wird, und nicht schon während des programm-starts!!

    danke schonmal
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Eigentlich haette ich gedacht, dass das sowieso so ist. Wenn nicht, wirst Du wohl den Kernel hacken muessen, da der doch bestimmt dafuer zustaendig ist, wann was geladen wird.
     
  4. #3 kale1990, 14.10.2010
    kale1990

    kale1990 Jungspund

    Dabei seit:
    11.05.2007
    Beiträge:
    17
    Zustimmungen:
    0
    benutze solaris 10, weiß da einer eventuell genauer bescheid oder kann mir hier noch hinweise geben? das muss doch über link(ld)-parameter funktionieren
     
  5. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Na, jetzt war ich doch neugierig. Bei GNU ld (GNU ld (GNU Binutils for Debian) 2.18.0.20080103) gibt's die Option '-zlazy', welche laut man-page das macht, was Du moechtest:
    Aber offenbar ist das tatsaechlich die Voreinstellung. Was sagt denn die man-page unter Solaris dazu?
    Ich moechte jetzt auch zu gern wissen, wozu Du so eine spezielle Option benoetigst.
     
  6. #5 kale1990, 14.10.2010
    Zuletzt bearbeitet: 14.10.2010
    kale1990

    kale1990 Jungspund

    Dabei seit:
    11.05.2007
    Beiträge:
    17
    Zustimmungen:
    0
    es geht hierbei um ein server-runtime-system das sich bei einer neue client-verbindung forkt...eine fehlerbehebung oder erweiterung einer bibliothek hätte immer den neustart des kompletten runtimes zur folge.
    außer es werden die bibliotheken erst geladen wenn sie verwendet werden, dann nämlich reicht eine neue client-verbindung(fork) und das neue laden der bibliothek zur aktivieren des "neuen" .so-files...
    hoffe ich hab das verständlich erklären könne.

    habe mittlerweile auch das mit dem lazy-load gefunden: http://docs.sun.com/app/docs/doc/817-1984/chapter3-1?a=view
    klappt bisher aber noch nicht!

    mit elfdump -d rts erhalte ich schon das das gewünschte shared-object(.so) [LAZY] geladen werden soll, aber die funktionen finde ich nicht in der symboltabelle des runtimes (elfdump -y rts)

    kann mir hier einer weiterhelfen


    danke für die bemühungen schonmal!
     
  7. #6 kale1990, 15.10.2010
    kale1990

    kale1990 Jungspund

    Dabei seit:
    11.05.2007
    Beiträge:
    17
    Zustimmungen:
    0
    hat denn keiner eine idee?
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  9. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Ich kenne elfdump nicht und habe auch kein Solaris hier, doch kannst Du nicht mal eine kleines Programm und Bibliothek schreiben, die das Verhalten simulieren, damit Du testen kannst, ob es vielleicht doch funktioniert? Vielleicht verstehst Du dadurch auch das Problem dann selber besser.
     
  10. #8 allesmueller, 15.10.2010
    Zuletzt bearbeitet: 15.10.2010
    allesmueller

    allesmueller Eroberer

    Dabei seit:
    05.07.2005
    Beiträge:
    69
    Zustimmungen:
    0
    Hi,
    Ich denke du willst nicht dynamisch linken sondern die libraries selbst laden.
    D.h. man dlopen ist dein Freund zum Einstieg ... ich hab mal unter FreeBSD sowas gefummelt, nur ein Ausschnitt ...
    Code:
           directory=opendir(".");
    
            while ((dep=readdir(directory)) != NULL) {
                    if ( (ext=rindex(dep->d_name,'.')) && ((strcmp(dyn,ext) == 0)) ) {
                                    printf("Loading module %s\n",dep->d_name);
                                    /* load module */
                                    if ( (test=dlopen(dep->d_name, RTLD_NOW | RTLD_GLOBAL)))
                                    {
                                            my_entry = dlsym(test,"myprint");
                                            dlerr=dlerror();
                                            if (dlerr != NULL) {
                                                    printf("dlerr: %s\n",dlerr);
                                            }
                                            my_entry("hauah");
                                            addmoduletolist(modlist, dep->d_name, test, my_entry );
                                    } else {
                                            dlerr=dlerror();
                                            printf("Rv: %s\n", dlerror());
                                    }
                    }
            }
    
            closedir(directory);
    
    HTH,
    allesmueller
     
Thema:

shared object (.so) dynamisch nachladen

Die Seite wird geladen...

shared object (.so) dynamisch nachladen - Ähnliche Themen

  1. plötzlich verlangt er noch einige shared objects

    plötzlich verlangt er noch einige shared objects: Hallo Ich benutze einen java-wrapper für tesseract-ocr. Alles ist prima gelaufen - seit einer woche will er zusätzliche Shared Objects haben...
  2. error while loading shared libraries: libstdc++.so.6: cannot open shared object file:

    error while loading shared libraries: libstdc++.so.6: cannot open shared object file:: Hallo, Ich habe hiermit gerade ein Problem: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file...
  3. shared objects

    shared objects: Hallo, gibt es eine Möglichkeit .so bibliotheksdateien zu durchsuchen (z.B. auf Versionsnummern). Ich bin fast am verzweifeln.X( Vielen...
  4. AIX VIO Server Shared Storage Pool

    AIX VIO Server Shared Storage Pool: Hallo Zusammen, ich bin gerade dabei bei einem AIX VIO Server (Ver. 2.2.2.2) ein Shared Storage Pool zu erstllen. Den Pool konnte ich...
  5. g++ Shared Libraries

    g++ Shared Libraries: Hallo, erst einmal wollte ich in meinem ersten Post natürlich dem Forum sehr freundlich Hallo sagen: Haaallooo Forum :brav: Ich bin der Stimpy,...