2009-06-08 16 views
5

Ho una libreria condivisa wise.so. Come posso usarlo nel mio programma? Devo includere le intestazioni di quella libreria?Librerie condivise Linux C++

Io lavoro con Eclipce sotto Linux. Ho impostato un percorso per la libreria usando -L e -l. Ma la mia funzione non è visibile nel programma.

Potrebbe spiegarmi come funziona la Libreria condivisa?

Saluti.

EDIT:

ottengo il seguente errore:

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); 
} 

Intestazione:

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 
    }; 

risposta

10

È necessario includere il file di intestazione nella propria applicazione e di collegamento contro di essa.

Dai un'occhiata a come utilizzare le librerie in shared libraries e Linux howto.

Se il file di intestazione non si trova nella stessa directory dell'applicazione (che in genere non lo è), è necessario indicare al compilatore dove cercarlo, utilizzare -I/path/to/include per includere il percorso per includere la directory che contiene l'intestazione file.

Nel passaggio di collegamento è necessario puntare alla libreria. L'utilizzo generale è quello di utilizzare -L/path/to/lib è percorso alla directory contenente la libreria seguita da -l<libname> dove <libname> è il nome della libreria senza lib ad es. se avete libboost_serialization-d-1_34_1.so si usa -lboost_serialization-d-1_34_1

Esempi:

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

per favore, dai un'occhiata al mio codice – user101375

+0

"riferimento non definito a' CEDD_Descriptor :: CEDD :: CEDD [in-charge]() "sembra che il linker non trovi i simboli nella libreria, usi -L/libreria/percorso/a/lib -llibname da collegare? – stefanB

0

Avete anche modificato il percorso di inclusione (l'opzione -I) in modo che sa dove cercare le intestazioni per la biblioteca? Se non lo hai fatto, il compilatore si lamenterà di non riuscire a trovare funzioni/classi/strutture/ecc.

Problemi correlati