c++ - 静态变量初始化代码永远不会被调用

标签 c++ static-variables dead-code

我有一个应用程序正在使用我制作的静态库。库中的一个 .cpp 文件有一个静态变量声明,其构造函数在一个单例上调用一个函数来做某事——例如添加一个字符串。

现在,当我从应用程序中使用该库时,我的单例似乎不包含应该添加的字符串的任何痕迹。

我肯定错过了什么,但我不知道是什么......

最佳答案

如果您在静态库中有一个未在应用程序中EXPLICITLY 使用的对象。然后链接器不会将该对象从库中拉到应用程序中。

静态库和动态库有很大区别。

动态库:
在编译时,不会从动态库中提取任何内容。添加了额外的代码以在运行时显式加载和解析符号。在运行时加载整个库,因此调用对象初始值设定项(尽管实现细节是什么时候)。

静态库的处理方式非常不同:
当您链接静态库时,它会将应用程序中未定义但已在库中定义的所有项目拉入应用程序。重复此操作,直到不再有库可以解析的依赖项为止。这样做的副作用是不会从库中提取未明确使用的对象/函数(因此不会提取未直接访问的全局变量)。

关于c++ - 静态变量初始化代码永远不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1897184/

相关文章:

c++ - 如何保持无法访问的代码?

c - 检测 C 中未使用的函数

c++ - 加载库() : How to handle invalid DLLs?

c++ - 如何在 std::queue 中存储 char 缓冲区

c++ - 在 C++ CT 重建算法中使用数组

更改 C 代码以完全运行(包括 if 的所有部分)

C++ 类型信息

php - PHP 中的静态函数变量和连接

c - 在Ada中实现变量数据耦合到函数中(类似于C中函数中的静态变量)

php - 如何跨两个文件访问变量