我有一组静态编译的库,库之间具有相当深入的运行依赖关系。例如,可执行文件 X 使用库 A 和 B,A 使用库 C,B 使用库 C 和 D:
X -> A
A -> C
X -> B
B -> C
B -> D
当我将 X 与 A 和 B 链接时,如果没有将 C 和 D 也添加到库列表中,我不希望出现错误 - A 和 B 在内部使用这些库的事实是 X 不需要的实现细节要知道。此外,当在依赖关系树的任何位置添加新的依赖关系时,任何使用 A 或 B 的程序的项目文件都必须重新配置。对于深度依赖树,所需库的列表可能会变得非常长且难以维护。
因此,我在 A 项目中使用 Librarian 部分的“附加依赖项”设置,添加 C.lib。在 B 的项目的同一部分,我添加了 C.lib 和 D.lib。这样做的效果是图书馆员将 C.lib 捆绑到 A.lib 中,并将 C.lib 和 D.lib 捆绑到 B.lib 中。
但是,当我链接 X 时,A.lib 和 B.lib 都包含它们自己的 C.lib 副本。这导致了大量的警告
A.lib(c.obj) : 警告 LNK4006 "symbol" (_symbol) 已在 B.lib(c.obj) 中定义;第二个定义被忽略。
如何在不收到警告的情况下完成此操作?有没有办法简单地禁用警告,还是有更好的方法?
编辑:我看到不止一个答案表明,由于缺乏更好的选择,我只是禁用了警告。好吧,这是问题的一部分:我什至不知道如何禁用它!