6

libabc建议不要使用 GCC 构造函数/析构函数,但解释相当简短:

不要使用 gcc 构造函数或析构函数,只有这样做才能松动。不要使用 _fini() 或 _ini(),甚至不要使用您自己的显式库初始化器/析构函数。如果您的库是从另一个库或什至共享模块(即 dlopen())间接拉入的,它将无法工作

有人能解释一下问题是什么,什么可能会破坏,尤其是在不同平台上的 GCC 吗?

4

1 回答 1

2

编写库时,最好的方法是不依赖其他库,完全不依赖状态数据(当然不使用全局变量来进行库内的状态和同步),干净简单的接口,以及所有其他好的软件工程的基本原则。

libabc 的 README 提供的是一个相当不错的列表,列出了作者发现的使库难以使用或引入各种细微缺陷的所有方法。

作者的意思是,很难预测您的库将如何使用以及它将在其中运行的环境,因此您应该对如何实现功能以及操作系统和任何其他库提供哪些类型的服务感到偏执你可能会使用。

例如,请参阅Shared Library Constructor is not executed

或者何时(以及如何)调用 C++ 全局静态构造函数

或者GCC 构造函数不执行

于 2013-10-18T13:30:30.110 回答