gpt4 book ai didi

c - 即使定义了 "-nostdlib"选项,如何运行构造函数

转载 作者:行者123 更新时间:2023-12-01 15:05:53 25 4
gpt4 key购买 nike

我有一个包含构造函数的动态库。

__attribute__ ((constructor))
void construct() {
// This is initialization code
}

该库是使用 -nostdlib 选项编译的,我无法更改它。因此,库中没有 .ctor.dtor 部分,并且构造函数未在库加载时运行。

如所写there即使在这种情况下,也应该有允许运行构造函数的特殊措施。您能告诉我可以做什么以及如何做吗?

最佳答案

为什么需要构造函数?与我共事的大多数程序员,包括我自己,都拒绝使用具有全局构造函数的库,因为当输入 main 时,它们常常会弄乱程序的初始状态,从而引入错误。我能想到的一个具体示例是 OpenAL,它仅在链接时就破坏了程序,即使它从未被调用。我不是项目中处理此错误的人,但如果我没记错的话,它与处理 ALSA 以及稍后破坏主程序对 ALSA 的使用有关。

如果您的库具有非平凡的全局状态,那么看看您是否可以简单地使用全局结构和初始化程序。不过,您可能需要添加带有一些指针的标志,以指示它们是指向分配的内存还是静态内存。另一种方法是将初始化推迟到第一次调用,但这可能会产生线程安全问题,除非您使用 pthread_once 或类似方法。

关于c - 即使定义了 "-nostdlib"选项,如何运行构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4760567/

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