У меня есть основная библиотека dll под названием Lib1, у меня есть основное приложение, которое зависит от Lib1, и другая библиотека dll расширения под названием POS, она также зависит от 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 завершена успешно, и основное приложение, использующее класс TMenuBarEx, также успешно построено, библиотека POS не выполняет сборку, что приводит к ошибке
POSMain.obj : error LNK2001: unresolved external symbol "protected: static struct tagLOGFONTA TMenuBarEx::m_logFont" (?m_logFont@TMenuBarEx@@1UtagLOGFONTA@@A)
это действительно странно, потому что он определен в cpp и работает в основном приложении, а многие другие библиотеки расширений используют ядро Lib1 и успешно строят.
когда я хочу пройти через это, я снова переопределяю это в POSMain.cpp, это так плохо, но я делаю это, чтобы закончить выпуск. Как я могу это исправить или даже отследить ???
m_logFont
. Сравните его с именем, на которое жалуется компоновщик; разница часто оказывается проясняющей. - person Igor Tandetnik   schedule 11.02.2014