如何使用同一个lib的多个实例

时间:2012-02-06 10:46:16

标签: c++ c ar.drone

我必须扩展一个控制单个无人机(鹦鹉AR无人机)的C程序。目标是控制无人机中队,但API使用大量的全局变量(无人机IP,端口,无人机状态......)。如何在不实例之间“碰撞”的情况下多次实例化库?

我发现的唯一解决方案是修改API(开源)以在main()函数中的某处调用fork(),我想避免这种情况......

3 个答案:

答案 0 :(得分:1)

我建议只在服务流程中包装库。然后,您可以为每个无人机运行一个服务进程实例。否则,修复库以获取上下文参数。

答案 1 :(得分:1)

dlmopen可以多次加载一个库。但它仅限于15次 您还可以创建库的多个副本并加载每个副本。

答案 2 :(得分:0)

使用宏替换所有全局变量,如下所示:

#define global1 ctx->global1
#define global2 ctx->global2
...

然后为每个函数添加一个struct context *ctx参数。

或者,将_Thread_local(或__thread与旧版本的gcc)添加到每个全局变量,然后在其自己的线程中运行每个“实例”,以便它自然拥有自己的全局变量副本它。