Anzeige:
Ergebnis 1 bis 9 von 9

Thema: SharedObject, Executable und StaticLibrary ->Connection?

  1. #1
    Registrierter Benutzer
    Registriert seit
    17.08.2004
    Ort
    Sydney
    Beiträge
    36

    SharedObject, Executable und StaticLibrary ->Connection?

    Hi,

    also ich habe eine statische Library in der allerhand Funktionen enthalten sind.
    Desweiteren ein Executable welches die statische Libary nutzt.

    Das problem was ich jetzt habe ist, das ich ein sharedobject dynamisch zur Laufzeit hinzulinke und in diesem Funktionen der stat.Library genutzt werden. Manche Funktionen gehen, bei anderen kommt ein SegmentationFault? Im Executable kann ich alle Funktionen problemlos nutzen(warum auch nicht....). Ich habe keine Ahnung warum?

    Danke fuer Hilfe.

    PS: Das executable laedt das .so
    -------------------------------
    Lade das .so mit Hilfe:

    Code:
    InteractionManager::InteractionManager(string soPath, string function)
    {
        module = dlopen((char *)soPath.c_str(), RTLD_LAZY);
        if( !module)
        {
            cerr<<"Could not find so:"<<soPath<<endl;
            exit(1);
        }
    
        dlerror();
        interact = (void (*)(Node*))dlsym(module, (char *)function.c_str());
        if((error = dlerror()))
        {
            cerr<<"Could not find Function: "<<function<<"Error: "<<error<<endl;
            exit(1);
        }
    }
    Geändert von tommy@linux (09-08-2005 um 07:37 Uhr)

  2. #2
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Ist die .so auch von dir compiliert? Ist es eine C++-Library?

    Von G++ 3.2 auf 3.3 und von 3.4 auf 4.0 hat sich nämlich das ABI geändert; C++-Bibliotheken dieser verschiedenen Versionen sind nicht untereinander kompatibel.

  3. #3
    Registrierter Benutzer
    Registriert seit
    17.08.2004
    Ort
    Sydney
    Beiträge
    36

    Yep

    alles mit demselben Compiler gemacht.
    Ich verstehe das nicht ganz. habe am Ende eine Funktion B geschrieben, die dasselbe macht wie eine Funktion A, und A funzt bei beiden, und B nur im Exectuable????

  4. #4
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Also ohne Glaskugel oder Code kann ich nichts machen; und beides hab ich nicht.

    Kannst du deinen Code (incl. so-quellcode etc.) nicht mal irgendwo hochladen und den Link posten?

  5. #5
    Registrierter Benutzer
    Registriert seit
    17.08.2004
    Ort
    Sydney
    Beiträge
    36

    Zu viel

    das waere leider zu viel.... .

    Das Problem ist, das irgendwas beim linken schief geht, denke ich mal.

    Hat jemand mal ein aehnliches problem mit einem .so gehabt?

  6. #6
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Vielleicht hast du auch die -fPIC Option vergessen.
    Oder Programm und Library benutzen unterschiedliche Versionen der libc.
    Oder, oder, oder...

    Es gibt zuviele Möglichkeit, ohne genauere Infos wird dir hier niemand helfen können.

    "Wenn ich eine Linkskurve fahre, quietscht irgendwas. Hatte jemand schonmal das selbe Problem?"

  7. #7
    Registrierter Benutzer
    Registriert seit
    17.08.2004
    Ort
    Sydney
    Beiträge
    36

    ja

    das dumme ist halt ich weiss nicht was ich genaueres schreiben soll.
    Alles ist mit dem selben Compiler gebaut, ich verwende -fPIC(geht das auch ohne??), und wie gesagt Funktion A geht, B(Copy A) nicht.... .

    Ich denke einfach das was beim linken schief geht was auch immer...
    THX 4 HELP
    Tommy
    http://www.sunrise3d.de

  8. #8
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    das dumme ist halt ich weiss nicht was ich genaueres schreiben soll.
    Zum Beispiel die *genaue* Kommandozeile, mit der jedes Modul übersetzt wird.
    Alles ist mit dem selben Compiler gebaut, ich verwende -fPIC(geht das auch ohne??),
    Fpic sollte meines Wissens auf die Korrektheit keinen Einfluss haben. Es ist allerdings so, dass Bibliotheken die ohne Fpic-Option übersetzt wurden, effektiv nicht speichesparend gemeinsam benutzt werden können; Jedes Programm bekommt eine eigene Kopie der Bibliothek.
    Ich denke einfach das was beim linken schief geht was auch immer...
    Gut möglich, aber nicht der einzige Erklärungsansatz. Versuch mal dein Hauptmodul mit "W,l--export-dynamic" zu linken. (du benutzt doch den GCC zum Linken, oder?) Dazu kannst du die Erklärung in der Ld Manpage nachlesen. Ebenfalls in der Ld-Manpage ist eine Erklärung zur Ld-Option "-Bsymbolic". Das wäre auch ein Kandidat.

  9. #9
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    typo: Die Option muss "-Wl,--export-dynamic" heißen.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •