【问题标题】:error message when loading function from a shared library从共享库加载函数时出现错误消息
【发布时间】:2015-05-01 00:25:51
【问题描述】:

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

你能看出我做错了什么吗?

【问题讨论】:

  • 会不会是你没有定义makeKDBObj构造函数?

标签: c++ kdb


【解决方案1】:

extern "C" 的语法正确吗?

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

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

【讨论】:

    猜你喜欢
    • 2013-05-26
    • 2015-06-28
    • 1970-01-01
    • 2019-07-02
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多