Visual Studio增量链接完全重新链接模板

时间:2016-08-28 22:18:42

标签: c++ visual-studio visual-studio-2012

我遇到增量链接的问题,因为当我更改某些代码时,它有时会创建一个完整的链接。我已经将代码缩小到一个特定的部分,并且想知道是否有人知道原因。

我正在使用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)

Linker Tools Warning LNK6019

这是它包含的唯一信息

  

自上次增量链接会话以来添加或删除了一个指令。需要完整链接才能重新创建增量状态(.ILK)文件。

这是我的主要功能(显然在应用程序项目中)

#include "Updater.h"

int main()
{
    UpdateFrame();
    return 0;
}

0 个答案:

没有答案