首页 > 解决方案 > 我包含了必要的头文件,但得到“错误:gai_strerrorA 未在此范围内声明”,ubuntu16.04,g++ 5.5

问题描述

我现在正在将在寡妇上运行的代码移至 linux。很多部分都在使用标准库,但仍然有一些我必须删除的编译错误。现在,错误来自这一行

printf("[err] getaddrinfo: %s[%d] (%s, %d)\n", gai_strerrorA(ret), ret, server_addr, port);

错误消息如下。

g++ -Iinclude/ -Isource/ -Wall -Wno-unused-result -Wno-unknown-pragmas -Wfatal-errors -fPIC -std=c++11 -lm -lpthread -lrt -mavx -c source/sSocket2.cpp - o obj/sSocket2.o source/sSocket2.cpp:在成员函数 bool sj::cSocket2::ConnectUDP(const char*, int, int, int, int) 中:

source/sSocket2.cpp:125:68: 错误:gai_strerrorA 未在此范围内声明 printf("[err] getaddrinfo: %s[%d] (%s, %d)\n", gai_strerrorA(ret), ret ,服务器地址,端口);

当我查找 gai_strerrorA ( https://linux.die.net/man/3/gai_strerror ) 时,它需要 #include <sys/types.h>, <sys/socket.h> 和 <netdb.h> 所以我在#include 中添加了所有这三个文件。但是错误仍然存​​在。我应该怎么办?我应该安装一些库文件吗?(这是在 ubuntu 16.04 上,g++ (Ubuntu 5.5.0-12ubuntu1~16.04) 5.5.0 20171010)

标签: c++linuxsocketscompiler-errorsg++

解决方案


gai_strerrorA函数是“ASCII”字符串(与gai_strerrorW“Unicode”字符相反)的特定于 Windows 的扩展。

普通的 POSIX 标准函数只是gai_strerror,没有任何特定于字符的后缀(Windows 使用宏来定义无后缀的gai_strerror“函数”,具体取决于其他宏)。


推荐阅读