首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

动态库中的static对象解决方案

2012-03-27 
动态库中的static对象有两个库 a.so, b.so//a.so 有以下定义class A{public:func(){coutA::Aendl}}

动态库中的static对象
有两个库 a.so , b.so

//a.so 有以下定义
class A
{
public:
func(){cout<<"A::A"<<endl;}
};
void funA()
{
  statc A ob;
}
////////////
//b.so 有以下定义
class A
{
public:
func(){cout<<"b::A"<<endl;}
};
void funB()
{
  statc A ob;
  //并有以下代码
  {
  ob.func(); //原本要打印 b::A; ,但结果却是A::A ,why???
  }
}
/////////////
在使用中会先调用a.so中的funA().
随后调用b.so中的funB(),结果出现上述情况,是什么原因呢?
在b.so中,将class A放在一个命名空间中,使用时制定来自该命名空间则没问题.

[解决办法]
你怎么链接成功的?
两个so有相同的class,或链接冲突的
[解决办法]
我在windows中没有问题呀。各调各的。因为动态库是自己单独编译和链接的,代码不可能指向另一个动态库去呀。
在windows中只要export library不冲突链接肯定没有问题呀。

至于so我不懂
[解决办法]
不知道楼主是怎么调用动态库的,
如果so这种动态库也有一个类似export library的东西,只要你没把这个类export出来,应该链接没有问题。
如果你直接取函数地址调用,更不会链接冲突了呀,动态库怎么就不链接到程序中的,不然叫什么动态库呢

以上是我基于windows的解释

热点排行