gpt4 book ai didi

c++ - 防止链接器删除全局变量

转载 作者:行者123 更新时间:2023-12-02 03:06:18 25 4
gpt4 key购买 nike

我使用静态全局变量构造函数作为方便注册函数的技巧,其想法是这样的:

typedef int (*FuncPtr)(int);

struct RegHelper
{
RegHelper(const char * Name, FuncPtr Func)
{
Register(Name, Func);
}
}

#define REGISTER(func) RegHelper gRegHelper_ ## func (#func, func);

现在我可以通过这种方式注册函数(我用它来实现某种反射):

int Foo(int a)
{
return a * 123;
}

REGISTER(Foo)

int Bar(int a)
{
return a * 456;
}

REGISTER(Bar)

问题是,如果我在静态库中使用它,有时链接器会检测到编译单元未使用,并且会丢弃整个内容。所以全局变量没有构造,函数也没有注册...

我的问题是:我可以采取什么措施来解决这个问题?在初始化期间在每个编译单元中调用虚拟函数似乎会触发全局变量的构造,但这感觉不太安全。还有其他建议吗?

最佳答案

要解决这个问题:

  • Visual studio(在同一解决方案中):链接器 > 常规 > 使用库依赖项输入 = yes
  • Gcc:直接链接.o 文件

我还没有找到我真正喜欢的解决方案。

关于c++ - 防止链接器删除全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/806348/

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