静态变量初始化代码不会被调用
-
19-09-2019 - |
题
我已经得到了一个使用我做了一个静态库的应用程序。在库中的一个.cpp文件中有一个静态变量的声明,其构造函数上,做something-例如单身调用一个函数增加了一个字符串。
现在,当我使用该库从应用程序,我的单似乎并没有包含本来是要添加的字符串的任何痕迹。
我确实失去了一些东西,但我不知道是什么..
解决方案
如果你有在静态库中的对象不是<强>显式强>应用程序中使用。则链接器将不会从LIB到应用程序中拉该对象。
有是静态的和动态库之间有很大的区别。
动态库:结果 在编译的时候没有从动态库拉。额外的代码被添加到显式地加载和解决在运行时的符号。在运行时整个库加载和初始化被称为从而对象(尽管当为实现细节)。
静态库的处理非常不同:结果 当您对一个静态链接库它拉在库中定义到应用程序时未在应用程序中定义的所有项目。这被重复,直到没有该库可以解决更多的依赖关系。这样做的副作用是,未明确使用的对象/功能不被拉形式的库(没有直接访问也不会被拉出从而全局变量)。
其他提示
我的这种记忆是有点朦胧,但你可能有一个初始化顺序问题被击中。有没有保证其在不同的文件命令静态变量初始化函数被调用,因此,如果您的单尚未初始化,当你在图书馆静态变量被初始化,即可能会产生你所看到的效果。
我解决这些问题得到的方法是有某种明确的init
功能,做这个东西的,而且我在main
或某事的开始通话。你也许可以用你给的目标文件和库参数编译器的顺序拨弄(或连接器,实际上),因为这也为我工作,但这种解决方案是有点脆弱,因为它不仅取决于使用具体接头但大概也是特定版本。
重构做静态初始化类,所以它们不依赖于任何其它这样的类。即,使独立的,自给自足的每个类的初始化。
不隶属于 StackOverflow