visual-c++ - 在不获取 LNK4006 的情况下,在 Visual C++ 中链接具有依赖项的库

标签 visual-c++ module warnings

我有一组静态编译的库,这些库之间有相当深的运行依赖关系。例如,可执行文件 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 部分的“Additional Dependencies”设置,添加 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) : warning LNK4006 "symbol" (_symbol) already defined in B.lib(c.obj); second definition ignored.



如何在没有收到警告的情况下完成此操作?有没有办法简单地禁用警告,或者有更好的方法?

编辑 :我看到不止一个答案表明,由于缺乏更好的替代方案,我只是禁用了警告。嗯,这是问题的一部分:我什至不知道如何禁用它!

最佳答案

据我所知,您不能禁用链接器警告。
但是,您可以使用链接器的命令行参数忽略其中的一些,例如。/忽略:4006

将它放在链接器-> 命令行设置下的项目属性中(不记得确切位置)。

另请阅读:

Link /ignore

MSDN Forum - hiding LNK warnings

瓦切克

关于visual-c++ - 在不获取 LNK4006 的情况下,在 Visual C++ 中链接具有依赖项的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/564872/

相关文章:

module - 如何将 Rust 模块放在单独的文件中?

c++ - gnu c++ 中是否有 __if_exists 的等价物?

c++ - Visual C++ 应用程序中的 SQL Server 数据库

c++ - 如何解决中间 block 问题(考虑边缘 block 并在行中间留下任何 block )

ios - 无法在 Swift 中跨模块访问属性包装器

python - 将大型 python 文件拆分为具有共同依赖项的模块

python - FutureWarning : frame. 附加方法已弃用,请改用 pandas.concat

iphone - iCloud 和 GEOResourceManifestServerRemoteProxy : Lost connection to geod warning

PHP:将警告存储到日志文件中而不创建个人 set_error_handler

c++ - 运算符临时重载