2009-06-08 15 views
5

Tengo una biblioteca compartida wise.so. ¿Cómo puedo usarlo en mi programa? ¿Debo incluir encabezados de esa biblioteca?Linux Shared Libraries C++

Trabajo con Eclipce en Linux. He establecido un camino a la biblioteca usando -L y -l. Pero mi función no está visible en el programa.

¿Podría explicarme cómo funciona la Biblioteca compartida?

Atentamente.

EDIT:

me sale el siguiente error:

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

Cabecera:

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

Respuesta

10

Es necesario incluir el archivo de cabecera en su aplicación y el enlace en su contra.

Eche un vistazo a cómo usar las bibliotecas en shared libraries y Linux howto.

Si el archivo de cabecera no está en el mismo directorio que su aplicación (que normalmente no es), debe indicarle al compilador dónde buscarlo, use -I/path/to/include para incluir la ruta para incluir el directorio que contiene el encabezado archivo.

En el paso de vinculación, debe apuntar a la biblioteca. El uso general es usar -L/path/to/lib es la ruta al directorio que contiene su biblioteca seguido de -l<libname> donde <libname> es el nombre de la biblioteca sin lib p. si tiene libboost_serialization-d-1_34_1.so que usaría -lboost_serialization-d-1_34_1

Ejemplos:

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

por favor, eche un vistazo a mi código – user101375

+0

"referencia indefinida a' CEDD_Descriptor :: CEDD :: CEDD [a carga]() "suena como que el vinculador no puede encontrar símbolos en la biblioteca, ¿usa -L/library/path/to/lib -llibname al enlace? – stefanB

0

¿Usted también ha modificado la ruta de inclusión (la opción -I) por lo que sabe dónde buscar las cabeceras de la biblioteca? Si no lo ha hecho, el compilador se quejará de no poder encontrar funciones/clases/estructuras/etc.