Общие библиотеки Linux c ++ - PullRequest
5 голосов
/ 08 июня 2009

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

Я работаю с 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
    };

Ответы [ 2 ]

10 голосов
/ 08 июня 2009

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

Посмотрите, как использовать библиотеки в общих библиотеках и 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 голосов
/ 08 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...