【发布时间】:2014-03-28 02:37:46
【问题描述】:
我在 Visual Studio 中遇到链接错误。有两个项目。一个是静态库,另一个是可执行文件。我已经指出了 .exe 项目属性,以便它知道在哪里可以找到 .lib 文件和库目录。不太清楚为什么它仍然无法检测到我正在尝试使用的那个项目的功能。我还检查了确保函数签名匹配并且已实现。
我可以尝试任何其他建议吗? 另外,设置项目依赖项到底有什么作用?我已经尝试将 .exe 项目设置为依赖于静态库项目,但没有任何改变。
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 ==========
【问题讨论】:
-
另外,设置项目依赖项到底有什么作用? 它只是设置您的项目构建顺序。如果项目 A 依赖于项目 B,则项目 B 将始终先构建。
-
将两个项目放在同一个解决方案文件中,然后通过转到可执行项目的属性页 -> 通用属性 -> 添加新引用,将静态库引用添加到可执行项目的属性。
-
或者确保您的项目设置为“链接依赖库”。我这样做了,当前依赖的任何项目都会产生 .lib 输出(通过 DLL 导入库或静态库)将为您自动链接依赖项。
标签: c++ visual-studio linker