XLW 4.0.0.f0中的LNK4006错误

时间:2016-09-23 15:28:08

标签: c++ visual-studio linker-errors

XLW是一个开源库,它将C ++代码包装到Excel的XLL加载项中。在我正在处理的项目中报告了一个奇怪的LNK4006错误,报告XLW功能已“已定义”。

我正在使用XLW version 4.0.0.f0,为了简化情况,我把它分解为一个玩具项目,只有三个文件 -

StdAfx.cpp,boilterplate文件:

#include "stdafx.h"

StdAfx.h,boilterplate但神秘(我从不理解内容)

#if !defined(AFX_STDAFX_H__0D719468_50D1_11D2_9DAF_00207813663F__INCLUDED_)
#define AFX_STDAFX_H_0_D719468_50D1_11D2_9DAF_00207813663F__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

#define VC_EXTRALEAN        // Exclude rarely-used stuff from Windows headers

#include <afxwin.h>         // MFC core and standard components
#include <afxext.h>         // MFC extensions
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>         // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT


//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_STDAFX_H__0D719468_50D1_11D2_9DAF_00207813663F__INCLUDED_)

然后是拼图,WhyLNK4006.cpp:

#include <xlw/xlw.h> 
void WhyLNK4006()
{
    xlw::XlfExcel &x = xlw::XlfExcel::Instance();
    xlw::XlfExcel::Instance().FreeMemory(); 
}

这会触发LNK4006错误,我可以将其作为警告抑制,但无法猜测为什么会发生这种情况:

  

xlw-vc120-mt-gd-4_0_0f0.lib(XlfExcel.obj):警告LNK4006:“public:   void __thiscall xlw :: XlfExcel :: FreeMemory(bool)“   (?FreeMemory @ XlfExcel @ xlw @@ QAEX_N @ Z)已在B15.obj中定义;   忽略第二个定义

我无法理解,为什么会出现这样的错误?

XLW和我的玩具项目都编译为/MTd,所有XLW头文件XXX.h都有预处理器保护,例如。

> #if !defined(XXX_H)
> #define XXX_H //the read content of XXX.h
> #endif

为什么这会导致双重定义?

0 个答案:

没有答案