gpt4 book ai didi

c++ - 如何在静态链接库中强制构建全局对象? [MSVC9]

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:02:22 24 4
gpt4 key购买 nike

我有一个函数指针的全局列表。该列表应在启动时填充。顺序并不重要,也没有会使静态初始化复杂化的依赖关系。为了促进这一点,我编写了一个类,在其构造函数中向该列表添加一个条目,并在必要时通过宏分散此类的全局实例。这种方法的主要目标之一是消除在外部显式引用此类的每个实例的需要,而是允许需要在列表中注册某些内容的每个文件独立执行。漂亮干净。

但是,当将这些对象放入静态库时,链接器会丢弃(或者更确切地说从不链接)这些单元,因为其中没有代码被显式引用。在编译单元中明确引用符号会适得其反,直接与该方法的主要目标之一相矛盾。出于同样的原因,/INCLUDE 不是可接受的选项,而/OPT:NOREF 实际上与此问题无关。

Metrowerks 有一个 __declspec 指令,GCC 有 -force_load,但我找不到 MSVC 的任何等效项。

最佳答案

我认为您需要围绕这些变量声明的 #pragma optimize("", off)#pragma optimize("", on) 对。这将关闭丢弃它们的优化。

还要记住预处理器指令不能是宏的一部分。 __pragma 可以用于某些事情(并且专门设计用于宏),但不是所有事情,语法有点不同。不确定它是否适用于优化。

关于c++ - 如何在静态链接库中强制构建全局对象? [MSVC9],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2532653/

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