Visual c++ LNK2001的原因是什么:仅在一个项目中未解析外部符号

Visual c++ LNK2001的原因是什么:仅在一个项目中未解析外部符号,visual-c++,mfc,linker-errors,unresolved-external,Visual C++,Mfc,Linker Errors,Unresolved External,我有一个名为Lib1的核心dll库,我有一个依赖于Lib1的主应用程序和另一个名为POS的扩展dll库,它也依赖于Lib1,我在项目属性的引用中添加了Lib1,它会自动看到.lib。我将以下.h和.cpp文件添加到Lib1 //MenuBarEx.h class AMNLIB1_API TMenuBarEx : public CMFCMenuBar { DECLARE_DYNAMIC(TMenuBarEx) public: TMenuBarEx() {

我有一个名为Lib1的核心dll库,我有一个依赖于Lib1的主应用程序和另一个名为POS的扩展dll库,它也依赖于Lib1,我在项目属性的引用中添加了Lib1,它会自动看到.lib。我将以下.h和.cpp文件添加到Lib1

//MenuBarEx.h
class AMNLIB1_API TMenuBarEx : public CMFCMenuBar
{
    DECLARE_DYNAMIC(TMenuBarEx)
    public:
    TMenuBarEx()
    {
        NONCLIENTMETRICS ncm;
        ncm.cbSize = sizeof(NONCLIENTMETRICS) - sizeof(ncm.iPaddedBorderWidth); 
        ZeroMemory(&m_logFont, sizeof(LOGFONT));

        if (SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0))
        {
            m_logFont = ncm.lfMenuFont;
            TCHAR fontName[] = _T("tahoma");
            _tcscpy_s(m_logFont.lfFaceName, fontName);
            CMFCMenuBar::SetMenuFont(&m_logFont);
        }
    }
    virtual ~TMenuBarEx()
    {

    }
    BOOL LoadState(LPCTSTR lpszProfileName /* = NULL */, int nIndex /* = -1 */, UINT uiID /* = */ )
    {
        return TRUE;
    }
    BOOL SaveState(LPCTSTR lpszProfileName /* = NULL */, int nIndex /* = -1 */, UINT uiID /* = */ )
    {
        return TRUE;
    }
protected:
    static LOGFONT m_logFont;
    //DECLARE_MESSAGE_MAP()
};
//-------------------------------------------
//.cpp
#include "stdafx.h" // precompiled header
#include "MenuBarEx.h"

IMPLEMENT_DYNAMIC(TMenuBarEx, CMFCMenuBar)
LOGFONT TMenuBarEx::m_logFont;
Lib1构建成功,并且使用类tmenubrex的主应用程序也成功构建,库POS在构建中失败,给出错误

POSMain.obj : error LNK2001: unresolved external symbol "protected: static struct tagLOGFONTA TMenuBarEx::m_logFont" (?m_logFont@TMenuBarEx@@1UtagLOGFONTA@@A)
这真的很奇怪,因为它是在cpp中定义的,并且在主应用程序中工作,而许多其他扩展库正在使用核心Lib1并成功构建


当我想通过它时,我在POSMain.cpp中重新定义了它,这太糟糕了,但我这样做是为了完成发布我如何修复它,甚至跟踪它???

你把lib文件添加到POS项目了吗?@o_weisman:我使用属性->公共属性->框架和引用->添加新引用添加它,然后我添加了Lib1项目,现在该项目可以识别.lib及其完整路径。我在主应用程序中以相同的方式使用Lib1,注意结构名称:tagLOGFONTA。你有一个tagLOGFONTW的可能性。您必须确保所有项目的“常规+字符集”设置都是相同的。都是相同的,都是多字节的。现在我们有了一个移动到unicode的平面。所有DLL和都是多字节的。POS依赖于Lib1,并且使用了很多东西,我们从CString继承的字符串类型TString在Lib1中,它是应用程序的核心,只有静态成员在这个项目POS中有问题,这真是太疯狂了。使用Dependency Walker或dumpbin找出导出成员的修饰名称。将其与链接器抱怨的名称进行比较;这种差异往往具有启发性。