gpt4 book ai didi

gcc - 弱符号和 dlopen() 与 clang 与 gcc

转载 作者:行者123 更新时间:2023-12-03 17:50:36 26 4
gpt4 key购买 nike

我有一个定义如下内容的库:

    //singleton.hpp
class Singleton
{
public:
static Singleton* getInstance()
{
static Singleton* mInstance=0;
if (!mInstance)
{
mInstance=new Singleton();
}
return mInstance;
}
};

我在构建几个共享对象库时包含了这个头文件。当我使用 gcc (Ubuntu) 构建这些共享对象库时,静态被标记为唯一的:
(纳米输出)

0000000000045780 u 单例::mInstance

当我用 clang 构建共享库时,相同的符号被标记为弱:

0000000000045780 V 单例::mInstance

当我 dlopen(..., RT_NOW) gcc 构建的共享对象时,动态链接器修复了所有内容并且似乎创建了一个 mInstance 符号。但是,当我 dlopen(..., RT_NOW) 叮当构建的共享对象时,我为每个库获得了一个单独的符号,这使得单例不是单例。这是预期的行为吗?有什么方法可以强制动态链接器表现得好像符号被标记为唯一一样,就像它们在 gcc 编译中一样?

最佳答案

看起来像 https://llvm.org/bugs/show_bug.cgi?id=22281
但是,它没有标记为已解决,也不提供解决方法。

关于gcc - 弱符号和 dlopen() 与 clang 与 gcc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40157879/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com