VC 的 warning LNK4221 警告

该文章根据 CC-BY-4.0 协议发表,转载请遵循该协议。
本文地址:https://fenying.net/post/2013/07/27/vc-lnk4221-warning/

今天编译静态链接库时,VC提示了 LNK4221 警告。虽然没什么影响(起码暂时没遇到),也特别去查了下警告的由来。

该警告的中文提示是:

1xxx.obj : warning LNK4221: 此对象文件未定义任何之前未定义的公共符号,因此任何耗用此库的链接操作都不会使用此文件。

不得不说这个翻译真是非常的晦涩,令人费解。可能,面对如此繁多的提示,微软的翻译人员也偷懒了吧。我们还是来看看英文版的:

1warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library.

嘛,很好懂:该对象文件未定义任何公共符号,所以其它库也不会使用这个对象文件。

原因显而易见了,任何一个cpp文件,如果里面只写了声明,而没有定义部分,那么,其实这个cpp文件就是空的,也就没有任何公共符号(此处公共符号是连接器 Linker 中使用的符号)了。

微软的解释(英文):http://msdn.microsoft.com/EN-US/library/604bzebd(v=VS.110,d=hv.2).aspx

comments powered by Disqus