我正在尝试将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 :(得分:0)
你是extern的语法" C"正确的吗?
https://isocpp.org/wiki/faq/mixing-c-and-cpp#call-cpp
这似乎说你必须声明函数extern" C",然后在单独的步骤中定义它。