visual studio - c++:使用其他项目的函数

visual studio - C++ : Using functions from another project

本文关键字:其他 项目 函数 studio c++ visual      更新时间:2023-10-16

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

还有什么建议可以试试吗?另外,设置项目依赖关系到底是做什么的?我试过设置。exe项目依赖于静态库项目,但没有任何改变。

1>------ Build started: Project: TestAgent, Configuration: Debug Win32 ------
1>     Creating library Win32DebugTestAgent.lib and object Win32DebugTestAgent.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>Win32DebugTestAgent.exe : fatal error LNK1120: 3 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

请参阅这篇博客文章以获得一个很好的概述。它所做的比仅仅让它先被建造更强大。它还知道将库放在哪里,因此您不必在库路径列表中填充硬编码的位置来查找,当每种配置的路径不同时,这尤其令人讨厌。

确保您所说的"设置为依赖"是指新的项目到项目的引用,而不是解决方案级构建顺序/构建依赖对话框。

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