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

1 c++ static-variables dead-code

我有一个使用我制作的静态库的应用程序.库中的一个.cpp文件有一个静态变量声明,其ctor在单例上调用一个函数来执行某些操作 - 例如添加一个字符串.

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

我肯定错过了一些东西,但我不知道是什么......

Mar*_*ork 5

如果您有这不是一个静态库的对象明确标明应用程序中使用.然后链接器不会将该对象从lib拉入应用程序.

静态库和动态库之间存在很大差异.

动态库:
在编译时,动态库中没有任何内容.添加额外代码以在运行时显式加载和解析符号.在运行时,加载整个库,从而调用对象初始化程序(尽管实现细节时).

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