【发布时间】:2014-01-18 05:04:20
【问题描述】:
我正在使用 c++/windows 表单 (visual studio 2010) 开发一个项目,我们有 4 个项目:
- 1 个项目包含 GUI 窗口窗体 {托管代码},这是 exe 项目
- 其他 3 个项目 {非托管代码} 都是静态库。
- 在 4 个项目中,我们不使用预编译头文件 stdafx.h ,公共语言运行时支持是纯 MSIL 公共语言运行时支持 (/clr:pure)。
- 每个项目都包含其他 3 个项目作为附加包含目录,并将链接库依赖项设置为是。
我们有:
警告 LNK4221:此目标文件未定义任何以前未定义的公共符号,因此任何使用此库的链接操作都不会使用它
此警告针对同一对象文件 (.NETFramework,Version=v4.0.AssemblyAttributes.obj) 中的 3 个静态库项目。
我们想消除它,但经过一番搜索,大多数主题都说预编译的标头是我们不使用它的一个原因。
关于为什么存在此警告以及如何消除它的任何新想法?
【问题讨论】:
-
为什么不使用预编译头文件?与此警告链接的目标文件是什么 - 请发布链接器错误。是否编译和链接了 stdafx.cpp 文件?
-
@ManuelH 的链接显示了第一个谷歌点击,这很好地解释了它!
-
@Alex:我没有使用预编译的头文件,因为它产生了几个错误,关于哪些目标文件,这个警告出现在同一个目标文件中的 3 个静态库项目(\.NETFramework,Version =v4.0.AssemblyAttributes.obj),并且项目中没有stdafx文件。