从共享库加载函数时出现错误消息

时间:2015-05-01 00:25:52

标签: c++ kdb

我正在尝试将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*)

你能看到我可能做错的事吗?

1 个答案:

答案 0 :(得分:0)

你是extern的语法" C"正确的吗?

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

这似乎说你必须声明函数extern" C",然后在单独的步骤中定义它。