gpt4 book ai didi

c++ - 如何防止链接器优化掉启动代码?

转载 作者:太空狗 更新时间:2023-10-29 20:49:11 26 4
gpt4 key购买 nike

我有以下问题:我的 (C++-) 项目由几个子项目组成。在每个文件中,我都有几个文件,其中包含我想在启动时运行的代码。到目前为止,我的解决方案是使用静态变量来调用初始化时的相应代码,如下所示:

// Foo.cpp

static TFooRegistry sFooRegistry; // does stuff in constructor.

在为每个子项目使用 dll 构建我的项目时,一切正常,代码按预期运行。然而,当静态链接子项目时,链接器确定 Foo.o 不包含任何从外部引用的代码并将其优化掉。当然,我可以在其他地方添加对 sFooRegistry 的引用,但这很乏味且容易出错。

有哪些(符合标准的)解决方法?

好的,我可以在 mac/gcc 和 win/visual studio 上做什么?

最佳答案

没有标准的一致性方法可以强制初始化库中的对象——您必须根据您的特定平台使用技巧。 DLL 和静态库(至少在 Windows 上)之间的区别在于前者具有由操作系统执行的启动和关闭代码,而后者只是目标文件的串联。

此外,链接器并没有优化您的启动代码——它只是没有链接它,因为它显然从未被使用过。链接器是非常愚蠢的野兽 - 如果你想知道他们是如何做的,看看在书Linkers & Loaders .

关于c++ - 如何防止链接器优化掉启动代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1300778/

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