我收到以下链接错误
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的函数。关于可能出错的原因或链接器错误原因的任何建议?
答案 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;其他图书馆馆藏