сообщение об ошибке при загрузке функции из общей библиотеки

Я пытаюсь загрузить 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

Решение

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

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

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

0

Другие решения


По вопросам рекламы [email protected]