2015-05-01 3 views
0

Я пытаюсь загрузить C++ DLL в свое приложение C. Я скомпилировал файл .so успешно и имею функцию, определенную как getkobj.сообщение об ошибке при загрузке функции из общей библиотеки

При попытке загрузить его, я получаю сообщение об ошибке:

/home/Models/Code/makeKDBObj.so: undefined symbol: _ZN10makeKDBObjC1Ev 

У меня есть заголовочный файл:

#include "k.h" 

class makeKDBObj 
{ 
    public: 
    makeKDBObj(); 

    virtual KK getkobj(KK FileName); 
}; 

и исходный файл:

#include "makeKDBObj.hpp" 

extern "C" makeKDBObj* create_object() 
{ 
    return new makeKDBObj; 
} 

extern "C" void destroy_object(makeKDBObj* object) 
{ 
    delete object; 
} 

extern "C" makeKDBObj* getkobj() 
{ 
    return new makeKDBObj; 
} 

K getkobj (K FileName) 
{ 
    // ... 
} 

я могу найти символ в файле с nm -gC makeKDBObj.so | grep getkobj:

00000000000047a0 T getkobj(k0*) 

Можете ли вы увидеть что-нибудь, что я могу сделать неправильно?

+0

Может быть, вы не определили конструктор makeKDBObj? – Xaqq

ответ

0

Является ли ваш синтаксис для extern «C» правильным?

https://isocpp.org/wiki/faq/mixing-c-and-cpp#call-cpp

Это, кажется, говорят, что вы должны объявить функцию EXTERN «C», а затем определить его в отдельном шаге.

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