弱符号和dlopen()与铿锵vs.gcc
我有一个定义如下内容的库:弱符号和dlopen()与铿锵vs.gcc,gcc,clang,Gcc,Clang,我有一个定义如下内容的库: //singleton.hpp class Singleton { public: static Singleton* getInstance() { static Singleton* mInstance=0; if (!mInstance) { mInstance=new Singleton(); } re
//singleton.hpp
class Singleton
{
public:
static Singleton* getInstance()
{
static Singleton* mInstance=0;
if (!mInstance)
{
mInstance=new Singleton();
}
return mInstance;
}
};
我在构建两个共享对象库时包含了这个标题。当我使用gcc(Ubuntu)构建这些共享对象库时,静态对象被标记为唯一:
(纳米输出)
0000000000045780 u单体::MinInstance
当我用叮当声构建共享库时,相同的符号被标记为弱:
0000000000045780 V单体::MinInstance
当我打开(…,RT_NOW)gcc构建的共享对象时,动态链接器修复了一切,似乎只生成了一个MinInstance符号。但是,当我打开(…,RT_NOW)clang构建的共享对象时,我会为每个库获得一个单独的符号,这使得singleton不是singleton。这是预期的行为吗?有没有什么方法可以像gcc编译一样,强制动态链接器将符号标记为唯一的
但是,它没有标记为已解决,并且不提供解决方法