Visual Studio 2012链接错误与静态库

时间:2012-11-19 06:07:30

标签: dependencies visual-studio-2012 static-libraries linker-errors lnk2019

我最近从2005年升级到2012年(我很确定)并在构建我的解决方案时遇到链接错误。经过几个小时的谷歌搜索和周围的搜索,我的想法用尽了。我已经建立了几十个项目,所以我很确定我做的一切都是正确的,但公平地说,已经有几年了。

所以,作为测试我设置了一个新项目。我称之为App,一个Windows应用程序(.exe)。我创建了第二个名为Core的项目,并在其配置类型中将其标记为静态库(.lib)。两者都是解决方案的一部分。在Core中,我添加了Test.cpp和Test.h,它们包含一个具有简单功能的小类。然后,在Window的应用程序WinMain.cpp文件中,我有WinMain(),我通过CTest测试调用这个测试类; test.Result();

除此之外,我还将项目App的项目依赖项设置为Core,最后将App.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 ========

1 个答案:

答案 0 :(得分:27)

Visual Studio 2005在项目依赖项方面做了一些魔术,它会在任何.lib输出中自动链接(不幸的是,我帮助实现了它的开发人员)。我怀疑,当旧的Visual C ++构建系统被MSBuild替换时,Visual Studio 2010似乎已被删除。

但是,仍然可以通过项目引用找到“静态库依赖项的自动链接”功能:

  • 右键单击App项目并选择“References ...”
  • 点击“添加新参考”。
  • 检查静态库项目,然后按“确定”。
  • 构建

您现在应该看到自动链接的静态库。请注意,项目引用也意味着项目依赖性。

如果您更喜欢使用项目依赖项,则需要将静态库添加到“App”项目中链接程序的附加依赖项属性,就像您对任何其他静态库输入一样。

编辑:此外,您还会在项目参考上看到名为“链接库依赖项”的属性。这可以控制引用项目的.lib输出是否链接(默认为true)。