Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependencies Visual Studio 2012与静态库的链接错误_Dependencies_Visual Studio 2012_Static Libraries_Linker Errors_Lnk2019 - Fatal编程技术网

Dependencies Visual Studio 2012与静态库的链接错误

Dependencies Visual Studio 2012与静态库的链接错误,dependencies,visual-studio-2012,static-libraries,linker-errors,lnk2019,Dependencies,Visual Studio 2012,Static Libraries,Linker Errors,Lnk2019,我最近从2005年升级到2012年(我很确定),在构建解决方案时遇到了链接错误。在谷歌搜索了几个小时后,我的想法都没有了。我已经建立了几十个项目,所以我很确定我做的每件事都是对的,但公平地说,已经有几年了 因此,作为测试,我建立了一个新项目。我称之为App,一个Windows应用程序(.exe)。我创建了第二个名为Core的项目,并在其配置类型中将其标记为静态库(.lib)。两者都是解决方案的一部分。在Core中,我添加了Test.cpp和Test.h,它们包含一个小类,其中包含一个简单的函数。

我最近从2005年升级到2012年(我很确定),在构建解决方案时遇到了链接错误。在谷歌搜索了几个小时后,我的想法都没有了。我已经建立了几十个项目,所以我很确定我做的每件事都是对的,但公平地说,已经有几年了

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

除此之外,我还将项目应用程序的项目依赖项设置为核心,并最终将Test.cpp/.h所在的核心代码路径添加到应用程序的附加Include目录中

我得到以下链接错误,我的生活不能找出原因。有人知道我可能错过了什么步骤,或者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 ========

VisualStudio2005对项目依赖项做了一些奇妙的处理,它可以自动链接到任何.lib输出中(不幸的是,我是帮助实现它的开发人员)。自从旧的VisualC++构建系统被MSBudio./P>替换以来,我怀疑这已经被移除了VisualStudio 2010。 但是,“静态库依赖项的自动链接”功能仍然可以通过项目引用找到:

  • 右键单击应用程序项目并选择“引用…”
  • 单击“添加新引用”
  • 检查静态库项目,然后按OK
  • 建造
现在应该可以看到静态库被自动链接到中。请注意,项目引用还意味着项目依赖关系

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


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

谢谢!昨晚我在FB上打了几个朋友的电话,他们给我指了同一个方向。令人惊讶的是,我没有发现任何其他文章引用了相同的解决方案,所以希望这篇文章将来对其他人有益。我还尝试将libs添加到输入中,这当然有效,但远远不够理想。阿尔比特说,实际上我忘了我试过那种解决办法。再次感谢你的帮助!作为一个快速参考,这是我被指向的链接:谢谢!我使用了Visual2005和2008,依赖项工作得很好。最近我迁移到2012年,遇到了这个问题。2008年的旧依赖项已正确迁移,但在“项目依赖项”窗口中添加的新依赖项做不了什么。奇怪的是,此窗口不再在同一个窗口中工作。在Visual Studio 2015中(可能也在早期版本中),在项目节点下有一个新的“引用”节点。右键单击“引用”子节点并选择“添加引用”。