【发布时间】:2010-12-21 19:52:12
【问题描述】:
我有一个 CPP 源文件,它使用 #if / #endif 在某些构建中完全编译出来。但是,这会产生以下警告。
warning LNK4221: no public symbols found; archive member will be inaccessible
我正在考虑创建一个宏来生成一个实际上不会使用的虚拟变量或函数,这样这个错误就会消失,但我想确保它不会导致问题,例如在多个中使用宏导致链接器轰炸多个定义的符号的文件。
消除此警告的最佳方法是什么(而不是简单地抑制链接器命令行上的警告)?
FWIW,我很想知道如何通过抑制链接器命令行上的警告来做到这一点,但是我在那里的所有尝试似乎都被链接器简单地忽略了并且仍然产生错误。
另一个要求:该修复程序必须能够经受住单个文件构建或统一构建(组合 CPP 文件构建),因为我们的构建配置之一是批量构建(类似于统一构建但批量文件组而不是单个主统一文件)。
【问题讨论】:
-
您尝试过调用链接器的哪种语法(但对您不起作用)?
-
我已经为链接器尝试了“/ignore:4221”,为 cpp 文件尝试了“#pragma warning(disable: 4221)”。都没有用。
-
我们使用虚幻引擎进行开发。我们的游戏工作室(WB Games Chicago)和 Epic 都发现批量构建(每个系统/目录大约 1 个 Unity 构建)显着减少了编译时间和链接时间(快了约 4 倍)。它们还帮助编译器更好地内联代码并生成执行速度更快的代码。因此,我们将批量构建用于零售和开发构建,但不用于完整调试构建。
-
作为旁注,谷歌搜索,似乎没有记录或已知的方法来禁用 VC 链接器警告 -
/ignore仅适用于 VC6。 -
@Adisak - 感谢有关统一构建的信息。
标签: c++ visual-c++ linker suppress-warnings