6

我正在用 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)    
4

9 回答 9

10

我遇到了同样的错误(“LNK2019: unresolved external symbol ....”)。我的标头和调用被正确定义,它只是在调试模式下无法链接(在发布模式下没有抱怨)。原来我的问题是由不正确的.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

  <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 并且互联网上没有任何解释帮助时,请检查您的项目设置。如果您使用版本控制,请将当前项目文件与已知良好的旧版本进行比较。

于 2013-10-30T20:34:45.787 回答
9

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

于 2014-05-13T08:42:30.107 回答
4

就我而言,这是因为抽象类中的方法是虚拟的,但没有在任何子类中实现。

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

于 2015-04-20T22:15:54.060 回答
3

如果您查看错误 LNK2019: unresolved external似乎问题在于设置子系统。您的问题与错误 LNK2019: unresolved external symbol相关。

于 2013-02-15T09:24:54.943 回答
3

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

于 2015-07-14T06:18:12.207 回答
1

MSDN 页面上的第二点应用函数参数作为指针而不是对应于模块范围 decls 的变量名称传递。

于 2015-11-21T14:17:18.053 回答
0

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

于 2020-03-11T11:32:58.847 回答
0

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

于 2016-07-28T17:56:48.073 回答
-1

我遇到了这个错误——我的问题是我调用了一个不存在的函数。所以 Visual Studio 在其他库和 dll 中寻找这个函数。

于 2015-12-28T09:21:20.057 回答