7

我正在使用第三方库开始一些工作,并且在 Visual Studio 2010 中构建它时,我注意到我多次收到此链接器警告(LNK4221)。我查看了用于创建被链接的目标文件的源代码,发现这些文件的所有实现都位于头文件中。有趣的是,我还注意到该项目包含相应的 .cpp 文件,其中包含一个 #include 用于实现的标头。

我很好奇 - 这有什么意义,我为什么要使用这种技术?如果 .cpp 文件没有为项目增加任何价值,为什么我不应该删除它们以摆脱链接器警告?

我尝试搜索类似的问题,但没有找到任何感兴趣的内容。如果您知道任何,请链接它们。

4

2 回答 2

2

是单个#included 文件 stdafx.h 吗?I. 这种情况下,您正在处理预编译的 headers。正常设置是针对具有“生成预编译头”编译器选项的一个 .cpp 文件,而项目中具有“使用 pch”的其余 .cpp 文件。

于 2012-07-18T18:02:20.813 回答
1

我使用它来确保标题至少在第一个位置包含的一个文件中。通过这样做,我确保标头可以自行编译。

为了使链接器不发出警告,可以使用具有非常大变量的外部变量:

int variable_with_a_name_that_includes_the_file_name_somehow = 42;
于 2012-07-18T16:10:24.250 回答