检查静态库是否定义了所有符号

时间:2013-05-07 10:54:06

标签: c++ windows linker

我有一堆文件,这些文件被编译到链接到各种项目的库中,但是大多数项目只需要相对较小的一部分。所以我需要将它拆分为图层。

为了做到这一点,我想检查较低层不依赖于较高层中的任何东西。在Linux上,我只是简单地共享库并将-Wl,--no-undefined传递给链接。但我需要在Windows上进行此操作,其中动态库需要显式导出,并且源代码没有为此做好准备。

我还可以为每个图层准备一个单元测试,并在链接期间弹出未定义的符号。但是我只对类的小子集进行了单元测试,即使我添加了它们,如果添加了一些但未经过测试,它们仍然无法捕获。

还有其他方法来检查静态库除了指定的其他库集之外不需要任何符号吗?我可以使用Visual C ++ 9.0(2008)或MinGW。

1 个答案:

答案 0 :(得分:1)

嗯,我可以与你分享一些我想出来的特定于视觉工作室的力量链接。它并不是完全扫描以确保所有符号都是链接的,尽管这对于我自己在强制注册全局链接时起作用(在代码中的任何地方都没有实际引用)。要放在标题中:

#define DECLARE_OBJ( TYPE, INSTANCE_NAME ) \
  extern "C" TYPE INSTANCE_NAME; \
  __pragma( comment ( linker, "/INCLUDE:_" __STRINGIZE( INSTANCE_NAME ) ) )

这会发出关于两个编译时字符串之间的空格的警告。因为它完全没用,我把警告带走了。希望这会有所帮助。