【发布时间】:2010-12-28 17:38:13
【问题描述】:
我有一个.cpp 文件(我们称之为statinit.cpp)使用gcc 编译并链接到我的可执行文件中。
我的main() 函数在statinit.cpp 中不是。
statinit.cpp 有一些我需要运行的静态初始化。
但是,我从来没有在我的main() 中明确引用来自statinit.cpp 的任何内容,或者它所引用的任何内容。
会发生什么(我想)是从statinit.cpp 创建的链接对象永远不会在运行时加载,所以我的静态初始化永远不会运行,导致代码中的其他地方出现问题(这很难调试,但我最终跟踪它)。
是否有标准库函数、链接器选项、编译器选项或可以让我强制该对象在运行时加载而不引用其元素之一的东西?
我想做的是在 statinit.cpp 中定义一个虚拟函数,在 main() 看到的头文件中声明它,然后从 main() 调用该虚拟函数。但是,这是一个非常丑陋的解决方案,我非常希望避免对 statinit.cpp 本身进行更改。
谢谢, 丹尼尔
【问题讨论】:
-
当您说“程序集”时,这是否意味着这是一个 .NET 问题?如果是这样,请将其标记为这样。如果不是,请编辑问题以使用不同的术语。
-
它在问题中说 gcc,所以它不是 .NET
-
显然“组装”不是正确的术语。改为“对象”(我希望是对的)。
-
你用statinit.cpp建静态库吗?然后链接到静态库?这可能是个问题。
-
“静态初始化”是什么意思?这不是 C++ 概念。您是否使用全局变量初始化?如果它们在命名空间中,这可能是个问题。