如何解决错误LNK2019

时间:2013-02-15 08:39:24

标签: c++ linker unresolved-external lnk2019

我正在用C ++发送一封简单的电子邮件。我从下面的链接下载了一个示例C ++程序。 http://cboard.cprogramming.com/cplusplus-programming/125655-sending-simple-email-cplusplus.html示例程序在编译时似乎遇到以下错误。请帮我解决。

Error   8   error LNK2019: unresolved external symbol _send_mail referenced in function _wmain  

Error   9   error LNK2019: unresolved external symbol __imp__recv@16 referenced in function "int __cdecl connect_to_server(char const *)" (?connect_to_server@@YAHPBD@Z)    

Error   10  error LNK2019: unresolved external symbol __imp__connect@12 referenced in function "int __cdecl connect_to_server(char const *)" (?connect_to_server@@YAHPBD@Z) 

Error   11  error LNK2019: unresolved external symbol __imp__htons@4 referenced in function "int __cdecl connect_to_server(char const *)" (?connect_to_server@@YAHPBD@Z)    

Error   12  error LNK2019: unresolved external symbol __imp__socket@12 referenced in function "int __cdecl connect_to_server(char const *)" (?connect_to_server@@YAHPBD@Z)  

Error   13  error LNK2019: unresolved external symbol __imp__getprotobyname@4 referenced in function "int __cdecl connect_to_server(char const *)" (?connect_to_server@@YAHPBD@Z)   

Error   14  error LNK2019: unresolved external symbol __imp__gethostbyname@4 referenced in function "int __cdecl connect_to_server(char const *)" (?connect_to_server@@YAHPBD@Z)    

9 个答案:

答案 0 :(得分:9)

我遇到了同样的错误(“LNK2019:未解析的外部符号....”)。我的标题和调用是正确定义的,它只能在调试模式下链接(在发布模式下没有投诉)。事实证明,我的问题是由错误的.vcxproj文件引起的。

当我通过编辑vxcproj文件向项目中添加新的依赖项时,我犯了一个错误:我认为除了文件扩展名之外,这两个部分是相同的,所以我从第一个文件中复制粘贴了两行<ItemGroup>到最后<ItemGroup>(见下文)。

暂时没有注意到,因为我使用批处理脚本在发布模式下编译代码。当我切换到调试模式时,项目在链接阶段失败。最终,我发现了我的错误,并通过以下补丁解决了问题:

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

.vcxproj文件的Buggy版本:

  <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>

结论:当您获得LNK2019并且互联网上的解释都没有帮助时,请检查您的项目设置。如果使用版本控制,请将当前项目文件与已知良好的旧版本进行比较。

答案 1 :(得分:8)

可能您已在类中声明了该函数,但忘记在其定义中使用范围解析运算符。至少这就是给我这个错误的原因。

答案 2 :(得分:4)

在我的情况下,这种情况正在发生,因为抽象类中的方法是虚拟,但未在任何子类中实现。

但是,这可能只是LNK错误的多种原因之一。

答案 3 :(得分:3)

如果你看error LNK2019: unresolved external,似乎问题是设置子系统。您的问题与error LNK2019: unresolved external symbol

有关

答案 4 :(得分:3)

可能您忘记在项目中包含一些源代码文件,或者您忘记实现某个功能等。 所以你的编译器找不到它。 (&#34; LNK2019:未解析的外部符号......&#34;)。

答案 5 :(得分:1)

应用MSDN page处的第二点,其中函数参数作为指针传递,而不是对应于模块宽度的变量名称。

答案 6 :(得分:0)

您需要将项目与Microsoft SDK库链接,以获取涉及套接字odbc和服务器连接的错误

答案 7 :(得分:0)

有时,当您没有int main()功能时,就会出现该错误。

答案 8 :(得分:-1)

我有这个错误 - 我的问题是我调用了一个不存在的函数。 因此,visual studio在其他库和dll中寻找此功能。