c ++动态库段错误

时间:2011-06-09 17:41:18

标签: c++ dynamic

我正在用c ++编写网络应用程序,我想启用插件,但我不知道该怎么做,以保护我的应用程序免受像segfault这样的错误。例如: 我有界面:

class IPlugin{
public:
  IPlugin();
  virtual ~IPlugin();
  virtual void callPlugin() = 0;
}

有人会写动态库:

class Plugin : public IPlugin{
public:
  Plugin();
  virtual ~Plugin();
  virtual void callPlugin();
}

void Plugin::callPlugin(){
  int* a = NULL;
  *a = 5;
}

在我的应用程序中调用此函数将以终止所有内容结束。我知道我可以使用fork(),但是插件中的函数会很短并且会被多次使用,所以我认为fork()太慢了。有什么想法吗?

PS。对不起我的英语。

1 个答案:

答案 0 :(得分:5)

这是一场失败的战斗,试图保护您免受加载到您的地址空间的错误代码。这些插件可以造成真正的伤害,你永远无法恢复。

要么接受一个错误的插件会让你的应用程序失效,或者你必须按照你的建议在一个单独的进程中隔离插件这一事实。但是你只需要调用一次fork,当你加载插件时,不要担心它很慢。真正的工作是使用某种形式的IPC从您的应用程序与插件进行通信 - 管道可能是合适的。