错误LNK2019:在这种情况下未解析的外部符号?原因?

时间:2013-11-14 01:41:34

标签: c++ dll mfc

我收到以下链接错误

error LNK2019: unresolved external symbol "class ATL::CStringT<unsigned short,class StrTraitMFC_DLL<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > __cdecl myjb::GetLocalAppPath(class ATL::CStringT<unsigned short,class StrTraitMFC_DLL<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &)" (?GetLocalAppPath@myjb@@YA?AV?$CStringT@GV?$StrTraitMFC_DLL@GV?$ChTraitsCRT@G@ATL@@@@@ATL@@ABV23@@Z) referenced in function "private: void __thiscall inmessage::init_service_thread(void)" (?init_service_thread@inmessage@@AAEXXZ)

我有以下方法

void inmessage::init_service_thread()
{
   std::string appDataFName = (CT2CA) myjb::GetLocalAppPath("");
}

现在,GetLocalAppPath是来自外部lib的函数。关于可能出错的原因或链接器错误原因的任何建议?

3 个答案:

答案 0 :(得分:0)

可能的原因是外部dll没有实现GetLocalAppPath。如果GetLocalAppPath接口的定义不是PURE虚函数,则会导致相同的链接错误。

答案 1 :(得分:0)

您正在以防止宏展开的方式使用宏。如果宏后面跟着一个开头(,那么它只会被展开。

(CT2CA) myjb::GetLocalAppPath("");

这行代码阻止了宏的扩展。这也是一件好事,因为纯粹的意外事故似乎只会起作用。

请改用:

CT2CA( myjb::GetLocalAppPath("").GetString() );

当然,这是假设GetLocalAppPath是命名空间myjb中的函数或类myjb的静态函数。无论哪种方式,您都尝试使用__cdecl调用约定导入它。确保这与导出的调用约定匹配。

答案 2 :(得分:-1)

如果您正在使用MS Visual Studio,请将导入库文件名libwhatever.lib添加到链接器中 - &gt;输入 - &gt;附加依赖。

还将lib文件的路径添加到链接器 - &gt;其他图书馆馆藏