How to solve error LNK2019

风流意气都作罢 提交于 2019-11-30 14:33:51
Rob W

I encountered the same error ("LNK2019: unresolved external symbol ...."). My headers and calls were defined correctly, and it only failed to link in Debug mode (no complaints in Release mode). It turned out that my issue was caused by an incorrect .vcxproj file.

When I added new dependencies to my project by editing the vxcproj file, I made a mistake: I thought that the two sections were identical except for the file extension, so I copy-pasted two lines from the first <ItemGroup> to the last <ItemGroup> (see below).

It went unnoticed for a while, because I used a batch script to compile the code in Release mode. When I switched to Debug mode, the project failed at the linking stage. Ultimately, I discovered my error, and resolved the problem with the following patch:

-    <ClCompile Include="crypto/crypto.h" />
-    <ClCompile Include="crypto/rsa_public_key.h" />
+    <ClInclude Include="crypto/crypto.h" />
+    <ClInclude Include="crypto/rsa_public_key.h" />

Buggy version of the .vcxproj file:

  <ItemGroup>
    ...
    <ClCompile Include="main.cpp" />
    <ClCompile Include="crypto/crypto.cpp" />
    <ClCompile Include="crypto/rsa_public_key.cpp" />
  </ItemGroup>
  <ItemGroup>
    <None Include="main.def" />
  </ItemGroup>
  <ItemGroup>
    ...
    <ClInclude Include="main.h" />
    <ClCompile Include="crypto/crypto.h" />
    <ClCompile Include="crypto/rsa_public_key.h" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>

Bottom line: When you get LNK2019 and none of the explanations on the internet help, check your project settings. If you use version control, compare the current project file with a known-good older version.

Probably you have declared the function in a class, but forgotten to use the scope resolution operator in its definition. Atleast that's what gave me that error.

In my case this was happening because a method in an abstract class, was virtual but was not implemented in any of the sub classes.

However, this might be only one of the multiple causes of that LNK error.

Mihai8

If you look error LNK2019: unresolved external it seem the problem is setting the subsystem. Your question is related to error LNK2019: unresolved external symbol.

Probably you forgot to include some source code files to the project, or you forgot to implement a function, etc. so your compiler cannot find it. ("LNK2019: unresolved external symbol ....").

Point two on the MSDN page applied where function parameters were passed as pointers instead of the variable names corresponding to the module wide decls.

You need to link your project with the Microsoft SDK libraries for errors involving socket odbc and server connections

STF

I had this error - and my problem was that I call a function that didn't exist. So the visual studio looks for this function in other libraries and dlls.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!