弱符号和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编译一样,强制动态链接器将符号标记为唯一的 但是,它没有标记为已解决,并且不提供解决方法