gpt4 book ai didi

c - 对 getaddrinfo 的 undefined reference

转载 作者:太空狗 更新时间:2023-10-29 16:53:51 25 4
gpt4 key购买 nike

我收到这个错误已经有一段时间了,谷歌也没有太大帮助。

我是 Winsock 编程的新手,正在尝试从在线资源中学习。我正在尝试使用 MSDN 网站上的详细信息构建一个简单的服务器。每当我编译代码 (MinGW) 时,我都会收到标题中提到的错误 (Undefined reference to getaddrinfo)。下面是代码:

#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#define WINVER WindowsXP

#include <windows.h>
#include <winsock2.h>
#include <winsock.h>
#include <ws2tcpip.h>
#include <stdio.h>

int main() {
WSADATA wsaData;
int iResult;
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != 0) {
printf("WSAStartup failed: %d\n", iResult);
return 1;
}

#define DEFAULT_PORT "27015"

struct addrinfo *result = NULL, *ptr = NULL, hints;

ZeroMemory(&hints, sizeof (hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_PASSIVE;

// Resolve the local address and port to be used by the server
iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result);
if (iResult != 0) {
printf("getaddrinfo failed: %d\n", iResult);
WSACleanup();
return 1;
}
return 0;
}

我正在使用以下命令进行编译:

gcc msdn_np.c -o msdn_np.exe -lWS2_32

最佳答案

这不是和这里一样的问题吗?

http://programmingrants.blogspot.com/2009/09/tips-on-undefined-reference-to.html

基本上不要忘记与 Ws2_32.lib 链接(消息来自链接器,所以这应该是原因)但你似乎已经在这样做了。

...如果您使用的是旧版本的 Windows 编程工具,请在包含 header 之前放置 #define _WIN32_WINNT 0x0501 告诉它您的版本高于 XP(不太可能仍然是现在需要,但也许)。

可能是其他简单的问题。库的正常 (Unix) 约定是在它们前面加上 lib。此后,-lWS32_32 的含义将是搜索名称为 libWS32_32.a 的文件。它很可能找不到它,因为它缺少包含库的目录的路径。您可以添加 -L 后跟正确目录的路径。或者,您甚至不需要 -l 来链接库,只需将库的完整路径(在本例中为文件系统中显示的文件的真实名称)也应该有效。

问题也可能与路径有关。例如,如果库路径包含空格,就会出现问题。如果是这样,您可以尝试将库文件放在名称更简单的目录中。

请对您的实际配置(库文件在哪个目录中)以及您实际尝试过的内容提供一些反馈。您还可以尝试设置 LIBS 和 LIBPATH 环境变量(最简单的方法可能是从 makefile 中设置)。

关于c - 对 getaddrinfo 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5220190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com