我正在使用第三方库开始工作,在Visual Studio 2010中构建它时,我注意到我多次收到此链接器警告(LNK4221)。我查看了创建链接的目标文件时使用的源代码,发现这些源代码文件的所有实现都位于头文件中。有趣的是,我还注意到该项目包含了相应的.cpp文件,其中包含仅一个带有实现的标题的#include。
我很好奇 - 这是什么意思,为什么我要使用这种技术?如果.cpp文件没有向项目添加任何值,为什么我不应该删除它们以消除链接器警告?
我尝试搜索类似的问题,但没有找到任何有趣的东西。如果您知道,请链接。
答案 0 :(得分:2)
单个#include
d文件是stdafx.h吗? I.那个案子,你正在处理precompiled headers。正常设置是针对一个.cpp文件,该文件具有“生成预编译头”编译器选项,并且项目中的其余.cpp文件具有“use pch”。
答案 1 :(得分:1)
我正在使用它确保标题至少包含在第一个位置的一个文件中。通过这样做,我确保标题可以自己编译。
为了使链接器不发出警告,可以使用具有非常大的变量的外部变量:
int variable_with_a_name_that_includes_the_file_name_somehow = 42;