Verwenden einer .so-Datei



  • Hallo,

    ich hätte da mal eine Frage. Und zwar muss bzw. soll ich vom Studium aus etwas programmieren. Dazu soll ich eine .so-Datei verwenden. Ich glaube das nennt man auch ein Shared Library.
    Diese Datei habe ich. Jetzt möchte ich sie verwenden. Wo muss die Datei sich befinden bzw. wie lautet der Befehl um sie zu includen? Ich arbeite erst seit 2 Tagen mit Linux (Ubuntu 11.10) und weiß daher nicht wirklich wo im System ich die Datei hinkopieren soll....

    Hab im Forum gesucht aber da waren die Themen eher wie ich eine solche Datei erstelle.Oder ich hab falsch gesucht....Wenn ja sorry...
    Wenn ihr mir helfen könntet wäre das klasse... Mag nämlich endlich starten.

    Viele Grüße Cascoin


  • Mod

    Ein üblicher Ort wäre /usr/local/lib/ oder auch /usr/lib/. Es geht auch jeder andere Ort, du musst ihn nur dem Linker mit angeben, zum Beispiel über die rpath-Option (dann wird zur Linkzeit und zur Laufzeit in dem Pfad gesucht). Falls du den Compiler das Linken organisieren lässt, musst du die Option mit -Wl an den Linker weiterreichen lassen, z.B.: gcc foo.c -Wl,--rpath,/pfad/zur/lib/ -lBibliothek
    Ansonsten normale Benutzung einer Bibliothek: Du solltest einen Header dazu bekommen haben, in dem die Funktionen deklariert sind und beim Linken gibst du mittels -l an, gegen welche Bibliotheken gelinkt werden soll, hier also unter anderem deine. Und natürlich nicht statisch linken, wenn's ein .so ist.



  • Ok,
    vielen Dank soweit. Jetzt hab ich grad nachgeschaut und bei der Bibliothek gibt es keinen Header im Download Bereich. Also bei der Bibliothek geht es um das Lösen von spärlich belegten Bandmatrizen (sparsly populated matrixes). Heißt Paradiso falls das von Interesse ist. Und ist auch nur für 3 Monate umsonst...
    Kann es also sein das man keine Header-Datei braucht?
    Also im Download-Bereich befindet sich eine Bsp .cpp-Datei unter der ich nachgucken kann wie die Funktionen heißen...Somit weiß ich wie man die Funktionen aufruft... Ich kenn des halt gar nicht solche shared-Librarys zu nutzen deswegen sorry wenn die Frage blöd ist...

    Und jetzt hab ich nochmal ne Frage zum includen:
    Und zwar möchte ich dann wenns los geht mit Eclipse programmieren. Und so wie ich das von anderen Entwicklungsumgebungen kenne dachte ich das ich
    #include <paradiso> schreiben müßte. Geht das so auch? Bzw muss ich da dann das Verzeichniss angeben in dem sich die *.so Datei befindet?

    einen schönen Tag noch.

    mfg Cascoin


  • Mod

    casicas13 schrieb:

    Ok,
    vielen Dank soweit. Jetzt hab ich grad nachgeschaut und bei der Bibliothek gibt es keinen Header im Download Bereich. Also bei der Bibliothek geht es um das Lösen von spärlich belegten Bandmatrizen (sparsly populated matrixes). Heißt Paradiso falls das von Interesse ist. Und ist auch nur für 3 Monate umsonst...
    Kann es also sein das man keine Header-Datei braucht?

    Missverständnis: Du brauchst den Header nicht zwingend ,aber es wird wesentlich einfacher dadurch. Sonst musst nämlich du dem Compiler mitteilen, wie die Funktionen aussehen und dafür musst du das erst einmal wissen.

    Also im Download-Bereich befindet sich eine Bsp .cpp-Datei unter der ich nachgucken kann wie die Funktionen heißen...Somit weiß ich wie man die Funktionen aufruft... Ich kenn des halt gar nicht solche shared-Librarys zu nutzen deswegen sorry wenn die Frage blöd ist...

    Da ist die Frage, wieso du die .so brauchst, wenn der Quellcode auch direkt vorliegt. Und wieso sie keinen Header dazu hgerausgeben.

    Und jetzt hab ich nochmal ne Frage zum includen:
    Und zwar möchte ich dann wenns los geht mit Eclipse programmieren. Und so wie ich das von anderen Entwicklungsumgebungen kenne dachte ich das ich
    #include <paradiso> schreiben müßte. Geht das so auch? Bzw muss ich da dann das Verzeichniss angeben in dem sich die *.so Datei befindet?

    Müssteste Mal im IDE-Forum fragen. Klingt aber zu einfach. Insbesondere hat ein #include gar nichts direkt mit Bibliotheken zu tun, sondern ist für Header. Ein paar mehr Grundlagen täten dir gut, bevor du fremde Bibliotheken benutzt. edit: Insbesondere, wenn die Bibliothek nicht besonders Entwicklerfreundlich ist. Ich habe mir mal die Anleitung angesehen (da wird auch beschrieben wie man linkt), das ist ja schon ein bisschen komisch, dass man selber alle Funktionen deklarieren soll.



  • Denkbar, dass die erwähnte .cpp-Datei (die ihm mitteilt, wie die Funktionen heißen) die Deklaration als Prototypen beinhalten. Damit wäre die Header-Datei ja hinfällig und die Funktionen stehen zur Verfügung, sofern der Linker die lib findet.

    #include <xx> gilt meines Wissens nach für xx-Files im default lib-Verzeichnis.
    Wenn Du etwas aus einem zusätzlich angegeben Pfad inkludieren willst, brauchst Du dafür Hilfe von mindestens 2 Paar Gänsefüßchen:
    #include <meineLib.h>

    Wenn jetzt beim Compileraufruf (wo auch immer Du den in Eclipse genauer angeben kannst) die shared library mit angegeben wird und die "Funktionsnamen" (mit den dazugehörigen Parameter-Datentypen in Klammern und dem Rückgabetyp davor) in der Quelldatei angegeben sind, sollten die Funktionen gefunden und richtig verwendet werden.



  • Würmchen schrieb:

    Wenn Du etwas aus einem zusätzlich angegeben Pfad inkludieren willst, brauchst Du dafür Hilfe von mindestens 2 Paar Gänsefüßchen:
    #include <meineLib.h>

    #include "meineLib.h"


Anmelden zum Antworten