我有一个关于共享对象(或 DLL)的问题。我正在为我的游戏引擎开发一个插件加载器。不过,在开始这样做之前,我需要先回答一个问题。
如果我使用外部函数加载数据,我可以卸载我的共享对象吗?
这是一个小代码片段:
//The Plugin:
class PythonScriptingPlugin : public Plugin {
void * system;
public:
PythonScriptingPlugin() {
system = new PythonScriptingSystem;
}
void * get() { return system; } //derived
};
extern "C" {
Plugin * libLoadPlugin() {
return new PythonScriptingPlugin;
}
}
//main app:
void * loadPlugin() {
void * handle = dlopen(Base::fs()->file("plugins", "libPythonScriptingPlugin.so"), RTLD_LAZY | RTLD_GLOBAL);
typedef (void*)(*loader)();
loader * libLoadPlugin = dlsym(handle, "libLoadPlugin");
void * data = libLoadPlugin()->get();
dlclose(handle);
return data;
}
当我调用 dclose 时,数据会被取消引用吗?
最佳答案
不,分配的内存仍然存在,但您将无法从该插件/dll 调用任何函数。这会使您的对象变得无用。
关于c++ - 共享对象 (DLL) 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6831551/