MS Visual Studio 2008。这似乎是一个名称混淆问题,但我找不到正确的搜索词来提供答案。
我有一个动态库,其中有一个类,它使用静态日志库中的日志类。动态库在项目设置中导入静态库。我在其他项目中使用这个静态库,所以我知道它编译和链接没有错误。
示例代码:
动态.h:
extern "C"
{
__declspec(dllexport) BYTE GetData();
};
动态.cpp:
#include "MyClass.h"
static MyClass g_Inst;
BYTE GetData() { return g_Inst.GetData(); }
MyClass.h:
#include "Logging.h"
class MyClass
{
public:
BYTE GetData() { CLogging::Instance().AddString("Test"); }
};
链接器:
error LNK2019: unresolved external symbol "public: void __cdecl CLogging::AddString(class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class ATL::ChTraitsOS<wchar_t> > > const &)" (?AddString@CLogging@@QAAXABV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsOS@_W@ATL@@@@@ATL@@@Z) referenced in function "public: unsigned char __cdecl MyClass::GetData(void)" (?GetData@MyClass@@QAAEXZ)
编辑:考虑可能是 Unicode 或 MFC 问题,我检查了 Dynamic 项目的项目设置:
测井项目:
还有另外两个项目也毫无问题地引入了 Logging:
我能看到的唯一区别是不工作的那个是作为动态 dll 构建的。