【问题标题】:Undefined Reference / Unresolved External Symbol未定义的参考/未解析的外部符号
【发布时间】:2012-01-17 18:45:07
【问题描述】:

我正在尝试使用 WinSock.h 头文件,但出现以下任一错误: 在 VS2010 (C++) 中:

Unresolved External Symbol to [the function included in winsock.g, e.g socket()]

在 gcc 命令行 (C) 中:

Undefined Reference to [the function included in winsock.g, e.g socket()]

代码很简单:只包含 Winsock.h 头文件,然后

SOCKET s =  socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);

socket()closesocket() 函数出现错误...! 我在 Stackoverflow 中搜索并找到了几个关于此的主题,但他们都建议更改头文件。我无法在此处更改 WinSock.h,因此我需要在使用头文件的实际代码中提供解决方案。有什么想法吗?

【问题讨论】:

    标签: c winsock undefined-reference unresolved-external


    【解决方案1】:

    根据文档,你需要ws2_32.lib

    进入Project->Properties->Linker->Additional dependencies,添加ws2_32.lib

    编辑:

    应该是Project->Properties->Linker->Input->Additional Dependencies

    【讨论】:

    • 嗨。感谢您的回答,但我找不到其他依赖项。我有常规、输入、清单文件、调试、系统、优化、嵌入式 DLL、高级、命令行。
    • 我使用的是 Visual Studio 2010。
    • 我在常规选项卡中找到了一个名为链接库依赖项的布尔属性,该属性设置为“是”。
    • “附加依赖项”条目在输入中;以上更正。
    • 对于未来的查看者:另一种解决方案是在包含 winsock2.h 头文件之前添加 #pragma comment(lib, "wsock32.lin") 或 #pragma comment(lib, "ws2_32.lib")。
    【解决方案2】:

    这些是链接器错误,而不是编译器错误。您需要链接 WinSock 库。对于 gcc,这意味着将库添加到您的链接命令行:

    gcc -Lpath/to/winsock/library -o myApplication myObject.o wsock32.lib
    

    恐怕我对 Visual Studio 一无所知,但this link 可能会有所帮助。

    【讨论】:

    • 我假设这是 gcc [App_To_Be_Compiled] -L [Winsock 库的路径] -o [output_exe]
    • 这意味着我每次编译时都必须链接库,还是有其他方法可以永久链接它?
    • 嗨。这样做了,仍然是同样的错误: gcc C:\Socket.c -L C:\Windows\System32\wsock32.dll -o C:\out.exe
    猜你喜欢
    • 1970-01-01
    • 2011-02-09
    • 2015-06-27
    • 2021-12-04
    • 2020-04-10
    • 2018-05-22
    相关资源
    最近更新 更多