Я пытаюсь загрузить 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*)
Вы видите что-нибудь, что я могу делать неправильно?
Ваш синтаксис для extern «C» правильный?
https://isocpp.org/wiki/faq/mixing-c-and-cpp#call-cpp
Кажется, это говорит о том, что вы должны объявить функцию extern «C», а затем определить ее в отдельном шаге.