C++ C++;将类实例传递给dlsym()共享库指针

C++ C++;将类实例传递给dlsym()共享库指针,c++,dynamic,dll,shared,C++,Dynamic,Dll,Shared,我正在尝试实现一个程序,在这个程序中,我需要将一个类实例从我的主程序传递到我的共享库函数,并使用dlsym()动态打开 我按如下方式加载我的库: IGraphLib* LibLoader::load(const std::string& file) { this->_dlHandle = dlopen(file.c_str(), RTLD_LAZY); if (this->_dlHandle == NULL) { std::cerr <&l

我正在尝试实现一个程序,在这个程序中,我需要将一个类实例从我的主程序传递到我的共享库函数,并使用dlsym()动态打开

我按如下方式加载我的库:

IGraphLib*  LibLoader::load(const std::string& file)
{
  this->_dlHandle = dlopen(file.c_str(), RTLD_LAZY);
  if (this->_dlHandle == NULL)
    {
      std::cerr << dlerror() << std::endl;
      return NULL;
    }
  IGraphLib*    (*loadFunc)();

  loadFunc = reinterpret_cast<IGraphLib* (*)()>(dlsym(this->_dlHandle, "load_lib"));
  if (loadFunc == NULL)
    {
      std::cerr << dlerror() << std::endl;
      return NULL;
    }
  IGraphLib*    inst = loadFunc();

  return inst;
}
共享库中的测试函数:

void    NibblerSDL::test(Nibbler* game) const
{
  std::cout << game->getWidth() << std::endl;
}
extern "C" IGraphLib*   load_lib()
{
  return new NibblerSDL();
}
库的load_lib函数:

void    NibblerSDL::test(Nibbler* game) const
{
  std::cout << game->getWidth() << std::endl;
}
extern "C" IGraphLib*   load_lib()
{
  return new NibblerSDL();
}

这是在加载库中还是在测试中发生的?你有没有像上面说的那样增加堆栈大小?你加载核心文件并查看堆栈跟踪了吗?你应该向我们展示库中“load_lib()”的代码。我在问题中添加了load_lib函数。segfault发生在test函数中,使用--max stackframe since来抑制segfault,但以无限循环结束。