【发布时间】:2009-10-26 12:01:21
【问题描述】:
我有这个:
a.cpp
int localfunction () { return 1; }
int local_symbol = localfunction();
b.cpp
void thirdfunction () {};
main.cpp
void main () { thirdfunction (); }
当我在主可执行文件中编译它时,一切正常(即使进行了优化),并且本地函数在启动时执行,即使我不直接调用它也是如此。
现在,在 Visual C++ 和 GCC 中,我将 a.cpp 和 b.cpp 放在静态库 (.lib) 中。 localfunction 不再被执行/定义。
据我了解,该符号被检测为“未使用”并被删除。但这听起来很奇怪,因为:
- 为什么我不使用 .lib 文件时它没有被删除?
- 既然链接了lib,为什么链接器会炸掉初始化代码?
我想要做的是在我使用的每个 .lib 文件中都有一组启动函数,自动注册一些数据。主可执行文件不应该知道链接了哪些文件,也不应该明确引用“localfunction”(/INCLUDE 确实有效,但不是最佳的)
顺便说一句:使用各种 VC++ 选项(OPT:NOREF 等)并不能解决问题。
谢谢! QbProg
【问题讨论】:
标签: c++ visual-c++ linker reference