我有以下问题:我的(C ++ - )项目由多个子项目的。在每一个,我有几个代码文件,我想在启动时运行。我的解决方案到目前为止是使用调用各自的代码上初始化这样静态变量:

// Foo.cpp

static TFooRegistry sFooRegistry;   // does stuff in constructor.

在使用的DLL各子项目建设我的项目,一切工作正常,代码运行正常。当静态链接的子项目,但是,链接确定foo.o将不包含任何代码从外部曾经引用并优化它拿走。当然,我可以添加引用sFooRegistry其他地方,但是这是繁琐的并且容易出错。

什么(标准符合的)解决这一方式有哪些?

OK,我能做些什么在Mac / gcc和赢得/视觉工作室?

有帮助吗?

解决方案

有迫使库的对象没有标准的符合性的方式来进行初始化 - 你必须使用技巧根据您的特定平台(一个或多个)上。一个DLL和与静态库之间的差异(在Windows,至少)是, 前者具有启动和由OS执行关机代码,而后者仅仅是一个目标文件的串联。

此外,链接器不会优化掉你的启动时的代码 - 它根本就不是链接它,因为它显然是从来没有使用过。链接器 是非常愚蠢的野兽 - 如果你想了解他们怎么他们做什么,看一看 在书链接器和装载机

其他提示

一些伎俩,但审查。 为Win系统(但不是Linux)使用显式DLLEXPORT - 在这种情况下接头doen't如果使用这个符号由外应用或不知道

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top