неопределенная ссылка на функцию общей библиотеки - PullRequest
2 голосов
/ 12 июня 2009

Я реализовал разделяемую библиотеку в Linux и пытаюсь протестировать ее, но я получаю сообщение об ошибке "неопределенная ссылка на` CEDD (char *) '".

Я использую Eclipse со следующими параметрами:

  • Путь для включения файлов (здесь все ок)
  • Путь к библиотеке и его имя. Путь правильный и зовут WISE_C (полное имя: libWISE_C.so)

Мой код:

Тестовая программа, которую я использую для тестов:

#include <iostream>
#include <Descriptor.h>

int main() {
    char* path = "/export/home/pdmazubi3/workspace/proj1/src/pic.jpg";
    double * cedd = CEDD(path); /////   <-ERROR!

    std::cout << "!!!Hello World!!!" << cedd[1];
    return 0;

}

Заголовок Descriptor.h:

double* CEDD(char* path);

Часть Descriptor.c с желаемой функцией:

#include "Descriptor.h"
#include "highgui.h"
#include "cv.h"

double* CEDD(char* path)
{
    IplImage* srcImg;
    IplImage* ImageGrid;
...
}

Что я делаю червяк? Я прочитал много статей в Интернете, но не нашел решения.

неопределенная ссылка на `CEDD (char *) '- это ошибка компилятора или компоновщика?

Ответы [ 2 ]

2 голосов
/ 12 июня 2009

Это ошибка компоновщика (хотя я не думаю, что он обычно включает бит 'char *'), поэтому кажется, что он либо не может найти вашу библиотеку, либо библиотека не содержит функцию. Последнее также может означать, что оно содержит фактическую функцию, но с другим именем; убедитесь, что оба проекта скомпилированы как C, а не C ++.

Edit: я пропустил, что ваша программа на C ++ (которая также объясняет более подробное сообщение компоновщика). В этом случае вы должны добавить extern "C" (условно, поэтому он используется только при использовании C ++) к объявлению CEDD, если библиотека находится в C.

1 голос
/ 12 июня 2009

Вы уверены, что связали объектный код, сгенерированный для descriptor.c при сборке?

...