我最近从2005年升级到2012年(我很确定),并且在构建解决方案时遇到了链接错误。经过数小时的Google搜索和搜索后,我的想法耗尽了。我已经建立了几十个项目,所以我可以肯定我做的一切都正确,但是,公平地说,已经过去了几年。
因此,作为测试,我建立了一个新项目。我称之为Windows应用程序(.exe)App。我创建了另一个名为Core的项目,并将其标记为Configuration Type中的静态库(.lib)。两者都是解决方案的一部分。在Core中,我添加了Test.cpp和Test.h,它们包含一个具有简单功能的小类。然后,在Window的应用程序WinMain.cpp文件中,我具有WinMain(),我可以通过CTest测试调用该测试类。测试结果();
与此同时,我将项目App的Project Dependencies设置为Core,最后将Test.cpp / .h所在的Core代码的路径添加到App的Additional Include Directories。
我收到以下链接错误,无法一生找出原因。有人知道我可能错过了哪一步,或者2012年与以前的版本相比有哪些变化?提前非常感谢您的帮助!
1>------ Build started: Project: App, Configuration: Debug Win32 ------
1>WinMain.obj : error LNK2019: unresolved external symbol "public: __thiscall CTest::CTest(void)" (??0CTest@@QAE@XZ) referenced in function _WinMain@16
1>WinMain.obj : error LNK2019: unresolved external symbol "public: __thiscall CTest::~CTest(void)" (??1CTest@@QAE@XZ) referenced in function _WinMain@16
1>WinMain.obj : error LNK2019: unresolved external symbol "public: int __thiscall CTest::Result(void)" (?Result@CTest@@QAEHXZ) referenced in function _WinMain@16
1>D:\Work\Test_Linker_Stupidity\App\Debug\App.exe : fatal error LNK1120: 3 unresolved externals
========== Build: 0 succeeded, 1 failed, 1 up-to-date, 0 skipped ========
最佳答案
Visual Studio 2005在项目依赖方面做得很神奇,它可以自动链接到任何.lib输出中(不幸的是,开发人员帮助实现了它)。我怀疑这是已删除,因为我怀疑是Visual Studio 2010,当时旧的Visual C ++生成系统已被MSBuild取代。
但是,仍然可以通过项目引用找到“自动链接静态库依赖项”功能:
右键单击App项目,然后选择“参考...”。
单击“添加新引用”。
检查静态库项目,然后按OK。
建立。
现在,您应该看到静态库已自动链接到其中。请注意,项目引用也暗含了项目依赖性。
如果您更喜欢使用项目依赖项,则需要像在其他任何静态库输入中一样,将静态库添加到“ App”项目上链接器的其他依赖项属性中。
编辑:此外,您还将在项目参考上看到一个名为“链接库依赖项”的属性。这控制是否链接参考项目的.lib输出(默认为true)。