4

我有一堆文件,这些文件被编译成一个链接到各种项目的库,但大多数项目只需要相对较小的一部分。所以我需要把它分成几层。

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

我还可以为每一层准备一个单元测试,并在链接期间弹出未定义的符号。但是,我只对一小部分类进行了单元测试,即使我添加了它们,如果添加了某些东西但没有经过测试,它们仍然不会捕获。

那么是否有其他方法可以检查静态库是否不需要任何符号,除了指定的其他库集?我可以使用 Visual C++ 9.0 (2008) 或 MinGW。

4

1 回答 1

1

嗯,我可以与您分享一些我想出的针对 Visual Studio 的强制链接。它并不完全扫描以确保所有符号都已链接,尽管这在强制注册全局变量链接时适用于我自己(实际上并没有在代码中的任何地方引用)。放置在标题中:

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

这确实会发出有关两个编译时字符串之间的空格的警告。iirc 我将警告删除了,因为它完全没用。希望这可以帮助。

于 2013-05-10T17:46:03.183 回答