C ++:使用另一个项目的函数

时间:2014-03-28 02:37:46

标签: c++ visual-studio linker

我在visual studio中遇到链接错误。有两个项目。一个是静态库,另一个是可执行文件。我已经指出了.exe项目属性,以便它知道在哪里可以找到.lib文件和库目录。不太清楚为什么它仍然不会检测我正在尝试使用的项目的功能。我还检查过以确保函数签名匹配并实现它们。

我可以尝试其他任何建议吗? 此外,设置项目依赖项的确切做法是什么?我已经尝试将.exe项目设置为依赖于静态lib项目,但是没有任何改变。

1>------ Build started: Project: TestAgent, Configuration: Debug Win32 ------
1>     Creating library Win32\Debug\TestAgent.lib and object Win32\Debug\TestAgent.exp
1>Registrar.obj : error LNK2019: unresolved external symbol "public: long __thiscall StudentManager::Register(class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &,class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &,class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &,class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &,class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &,class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &)" (?Register@StudentManager@@QAEJABV?$CStringT@GV?$StrTraitMFC@GV?$ChTraitsCRT@G@ATL@@@@@ATL@@00000@Z) referenced in function "public: void __thiscall Registrar::PopulateClasses(struct HWND__ *)" (?PopulateClasses@Registrar@@QAEXPAUHWND__@@@Z)
1>TestCase1.obj : error LNK2001: unresolved external symbol "public: long __thiscall StudentManager::Register(class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &,class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &,class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &,class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &,class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &,class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &)" (?Register@StudentManager@@QAEJABV?$CStringT@GV?$StrTraitMFC@GV?$ChTraitsCRT@G@ATL@@@@@ATL@@00000@Z)
1>Registrar.obj : error LNK2019: unresolved external symbol "public: long __thiscall SectionManager::Register(class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &,class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &,class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &,class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &,class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &,class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &,class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &)" (?Register@SectionManager@@QAEJABV?$CStringT@GV?$StrTraitMFC@GV?$ChTraitsCRT@G@ATL@@@@@ATL@@000000@Z) referenced in function "public: void __thiscall Registrar::PopulateClasses(struct HWND__ *)" (?PopulateClasses@Registrar@@QAEXPAUHWND__@@@Z)
1>TestCase1.obj : error LNK2001: unresolved external symbol "public: long __thiscall SectionManager::Register(class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &,class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &,class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &,class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &,class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &,class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &,class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > const &)" (?Register@SectionManager@@QAEJABV?$CStringT@GV?$StrTraitMFC@GV?$ChTraitsCRT@G@ATL@@@@@ATL@@000000@Z)
1>TeacherSectionManager.obj : error LNK2001: unresolved external symbol "private: static class ATL::CStringT<unsigned short,class StrTraitMFC<unsigned short,class ATL::ChTraitsCRT<unsigned short> > > Registration::m_strServiceBaseUrl" (?m_strServiceBaseUrl@Registration@@0V?$CStringT@GV?$StrTraitMFC@GV?$ChTraitsCRT@G@ATL@@@@@ATL@@A)
1>Win32\Debug\TestAgent.exe : fatal error LNK1120: 3 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

1 个答案:

答案 0 :(得分:0)

有关概述,请参阅this blog post。 它的功能确实比仅仅首先构建它更强大。它还知道它放置库的位置,因此您不必使用硬编码的位置来填充库路径列表,这在每个配置的路径不同时尤其令人讨厌。

确保“set to depend on”的意思是新的项目到项目引用,解决方案级别Build Order / Build Dependencies对话框。

您可以在链接中打开详细输出,以查看实际解析的输入。在这种情况下,查看记录的命令行就足够了。如果这表明包含了所需的lib,则可能是编译器选项会影响名称修改,或者有时是邪恶的#define宏,它会在您不知情的情况下更改符号的实际名称。