我遇到增量链接的问题,因为当我更改某些代码时,它有时会创建一个完整的链接。我已经将代码缩小到一个特定的部分,并且想知道是否有人知道原因。
我正在使用Visual Studio 2012(它在2015年表现出相同的行为)。 我创建了一个空白解决方案,其中包含2个项目(lib和exe)。我已设置增量链接以正常工作(也导入库输出)。
exe只是主要调用了' UpdateFrame'如下所列。
这是图书馆项目本身的所有代码。
struct TypeId
{
unsigned char myTypeId;
// Comment out this line and it links incrementally
TypeId() : myTypeId(0) {}
};
template<class Type>
struct TypeRegistrationHelper
{
static TypeId ourTypeId;
};
template<class Type> TypeId TypeRegistrationHelper<Type>::ourTypeId;
// Uncomment this line and it links incrementally
//template struct TypeRegistrationHelper<float>;
void UpdateFrame()
{
// Commenting/uncommenting this line causes a full link to happen
// unless you have changed 1 of the 2 lines listed above. Then it links
// incrementally as expected when changing this line.
TypeRegistrationHelper<float>::ourTypeId;
}
问题出现了,如果我在UpdateFrame中注释掉这一行,它会导致一个完整的链接发生(除非我修改了代码中注释的两行中的一行 - 然后一切正常)
我为增量链接启用了详细输出,这就是它列为执行完全重新链接的原因:
LINK:指令改变了;执行完整链接
这是关于此特定错误的MSDN页面(请注意它表示VC 6.0)
这是它包含的唯一信息
自上次增量链接会话以来添加或删除了一个指令。需要完整链接才能重新创建增量状态(.ILK)文件。
这是我的主要功能(显然在应用程序项目中)
#include "Updater.h"
int main()
{
UpdateFrame();
return 0;
}