C++ C++;将类实例传递给dlsym()共享库指针
我正在尝试实现一个程序,在这个程序中,我需要将一个类实例从我的主程序传递到我的共享库函数,并使用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
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,但以无限循环结束。