2009-06-08 5 views
5

У меня есть общая библиотека wise.so. Как я могу использовать его в своей программе? Нужно ли включать заголовки этой библиотеки?Общие библиотеки Linux C++

Я работаю с Eclipce под Linux. Я установил путь к библиотеке с использованием -L и -l. Но моя функция не видна в программе.

Не могли бы вы объяснить мне, как работает общая библиотека?

С уважением.

EDIT:

Я получаю следующее сообщение об ошибке:

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

Заголовок:

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

ответ

10

Вам необходимо включить заголовочный файл в приложении и ссылку против него.

Посмотрите, как использовать библиотеки в shared libraries и Linux howto.

Если заголовочный файл находится не в том же каталоге, что и в вашем приложении (которого обычно нет), тогда вам нужно сообщить компилятору, где его искать, вы используете -I/path/to/include, чтобы включить путь для включения каталога, содержащего заголовок файл.

На этапе связывания вам нужно указать на библиотеку. Общее использование заключается в использовании -L/path/to/lib - путь к каталогу, в котором находится ваша библиотека, а затем -l<libname>, где <libname> - это имя библиотеки без lib, например. если у вас есть libboost_serialization-d-1_34_1.so вы будете использовать -lboost_serialization-d-1_34_1

Примеры:

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

, пожалуйста, взгляните на мой код – user101375

+0

«неопределенная ссылка на' CEDD_Descriptor :: CEDD :: CEDD [in-charge]() «звучит как линкер не может найти символы в библиотеке, вы используете -L/library/path/to/lib -llibname для ссылки? – stefanB

0

Вы также изменили Включать путь (опция -i), поэтому он знает, где искать заголовки для библиотеки? Если вы этого еще не сделали, компилятор будет жаловаться на то, что не сможет найти функции/классы/структуры/и т. Д.

Смежные вопросы