2009-06-08 7 views
5

Ich habe eine gemeinsame Bibliothek wise.so. Wie kann ich es in meinem Programm verwenden? Muss ich Header dieser Bibliothek hinzufügen?Linux Shared Libraries C++

Ich arbeite mit Eclipce unter Linux. Ich habe mit -L und -l einen Pfad zur Bibliothek festgelegt. Aber meine Funktion ist im Programm nicht sichtbar.

Können Sie mir erklären, wie Shared Library funktioniert?

Grüße.

EDIT:

bekomme ich folgende Fehlermeldung:

int main() { 
    char* path = "/export/home/pdmazubi3/workspace/proj1/src/pic.jpg"; 
    CEDD_Descriptor::CEDD ced; // undefined reference to `CEDD_Descriptor::CEDD::CEDD[in-charge]()' 
    ced.execute(path); 
} 

Rubrik:

class CEDD 
    { 
     public: 
      CEDD(double Th0, double Th1, double Th2, double Th3,bool CompactDescriptor); 
      CEDD(); 
      ~CEDD(void); 

      double T0; 
      double T1; 
      double T2; 
      double T3; 
      bool Compact; 

      double* execute(char* path); 

     private: 
      int cedd_segnum;    //number of segments 
      int* cedd_partitionSize;  //number of pixels in each segment 
    }; 

Antwort

10

Sie müssen die Header-Datei in Ihrer Anwendung und Link gegen sie aufzunehmen.

Werfen Sie einen Blick auf die Verwendung von Bibliotheken in shared libraries und Linux howto. Wenn sich die Headerdatei nicht im selben Verzeichnis wie Ihre Anwendung befindet (was normalerweise nicht der Fall ist), müssen Sie dem Compiler mitteilen, wo er danach suchen soll. Verwenden Sie -I/path/to/include, um den Pfad einzuschließen, der das Verzeichnis enthält, das den Header enthält Datei.

Im Verknüpfungsschritt müssen Sie auf die Bibliothek zeigen. Die allgemeine Verwendung ist -L/path/to/lib ist der Pfad zu dem Verzeichnis, das Ihre Bibliothek enthält, gefolgt von -l<libname>, wobei <libname> der Name der Bibliothek ohne lib ist, z. wenn Sie libboost_serialization-d-1_34_1.so haben würden Sie -lboost_serialization-d-1_34_1

Beispiele verwenden:

g++ -I/sw/include -Wall -g -I/usr/local/include/boost-1_36/ -c main.cpp -o main.o 
g++ -L/sw/lib -lboost_serialization-d-1_34_1 -o x main.o 
+0

Bitte schauen Sie sich meinen Code – user101375

+0

"undefined Verweis auf' CEDD_Descriptor :: CEDD :: CEDD [in-Charge]() "klingt wie Linker kann nicht Symbole in der Bibliothek finden, verwenden Sie -L/Bibliothek/Pfad/zu/lib -llibname zu verknüpfen? – stefanB

0

Haben Sie auch den Pfad einschließen geändert (die Option -I), so dass es weiß, wo für die Header für die Bibliothek suchen? Wenn Sie dies nicht getan haben, wird der Compiler beschweren, dass er keine Funktionen/Klassen/Strukturen/etc finden kann.