2009-06-12 4 views
2

Я реализовал общую библиотеку в Linux и попытаюсь ее протестировать, но получаю сообщение об ошибке «неопределенная ссылка на` CEDD (char *) ».undefined ссылка на функцию общей библиотеки

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

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

Мой код:

Test программка я использую для испытаний:

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

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

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

ответ

2

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

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

+1

Отлично! Ты прав! Теперь я использую программу C для тестирования библиотеки C =), но когда библиотека подключена (Paths), я не получаю скомпилированный двоичный файл (я также не получаю никаких ошибок). Когда я удаляю все пути в lib, я получаю исполняемый файл на выходе! Как я могу быть? – user101375

+0

У меня нет опыта работы с eclipse и без сообщения об ошибке. Я не знаю. Возможно, вы можете получить журнал команд, которые он выполняет каким-то образом. – mweerden

1

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

+1

Нет, я не уверен в этом. Нужно ли мне это делать? Я думал, что мне нужен файл * .so и заголовок * .h. – user101375

+0

Загляните внутрь, чтобы обозначить символ CEDD. Затем убедитесь, что файл .so связан (к сожалению, я не специалист по Eclipse, чтобы предоставить подробную информацию о конфигурации среды ...) –