我有一个应用程序正在使用我制作的静态库。库中的一个 .cpp 文件有一个静态变量声明,其构造函数在一个单例上调用一个函数来做某事——例如添加一个字符串。
现在,当我从应用程序中使用该库时,我的单例似乎不包含应该添加的字符串的任何痕迹。
我肯定错过了什么,但我不知道是什么......
最佳答案
如果您在静态库中有一个未在应用程序中EXPLICITLY 使用的对象。然后链接器不会将该对象从库中拉到应用程序中。
静态库和动态库有很大区别。
动态库:
在编译时,不会从动态库中提取任何内容。添加了额外的代码以在运行时显式加载和解析符号。在运行时加载整个库,因此调用对象初始值设定项(尽管实现细节是什么时候)。
静态库的处理方式非常不同:
当您链接静态库时,它会将应用程序中未定义但已在库中定义的所有项目拉入应用程序。重复此操作,直到不再有库可以解析的依赖项为止。这样做的副作用是不会从库中提取未明确使用的对象/函数(因此不会提取未直接访问的全局变量)。
关于c++ - 静态变量初始化代码永远不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1897184/