如何消除警告LNK4221?

2024-04-04

我正在使用 c++/windows 表单(Visual Studio 2010)开发一个项目,我们有 4 个项目:

  • 1 个包含 GUI Windows 窗体 {托管代码} 的项目,这是 exe 项目
  • 其他3个项目{非托管代码}并且都是静态库。
  • 在这 4 个项目中,我们不使用预编译头 stdafx.h ,公共语言运行时支持是纯 MSIL 公共语言运行时支持 (/clr:pure)。
  • 每个项目都包含其他 3 个项目作为附加包含目录,并将链接库依赖项设置为 yes。

We have:

警告 LNK4221:此目标文件未定义任何先前未定义的公共符号,因此使用此库的任何链接操作都不会使用它

对于同一目标文件 (.NETFramework,Version=v4.0.AssemblyAttributes.obj) 中的 3 个静态库项目,会出现此警告。

我们想消除它,但经过一番搜索后,大多数主题都说预编译头是我们不使用它的一个原因。

关于此警告为何存在以及如何消除它有什么新想法吗?


免责声明:这个解决方案确实很糟糕,并且这段代码不应该添加到生产构建中!它仅对“隐藏”警告有用。

更好的解决方案是从编译中删除有问题的文件,因为它无论如何都是无用的。

原帖:

我遇到了来自多个依赖项的警告问题,我发现它是由某些翻译单元为空(即空源文件)引起的。

这些文件实际上有一个内容,但它在 Visual Studio 中被停用,所以我只是在开头添加:

__declspec( dllexport ) void getRidOfLNK4221(){}

现在我的项目编译时没有任何警告:)

希望它能有所帮助,即使这是一个迟到的答案!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何消除警告LNK4221? 的相关文章

随机推荐