c++ - 我包含了必要的头文件,但得到“错误: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)
解决方案
该gai_strerrorA
函数是“ASCII”字符串(与gai_strerrorW
“Unicode”字符相反)的特定于 Windows 的扩展。
普通的 POSIX 标准函数只是gai_strerror
,没有任何特定于字符的后缀(Windows 使用宏来定义无后缀的gai_strerror
“函数”,具体取决于其他宏)。
推荐阅读
- azure-devops - Azure DevOps Build 出现错误:找不到程序集“System.ComponentModel.Annotations”
- javascript - Typescript - 存储静态全局变量并按键检索?
- flutter - Flutter 自定义小部件
- vb.net - INSERT INTO SELECT 执行查询但没有向数据库插入数据
- nativescript - 尝试在虚拟设备上构建时出现 NativeScript 错误
- r - 使用卸载的 R 包中的 S3 方法
- firebase - 当用户已经在聊天时,Firebase 聊天会阻止推送通知
- javascript - 单击按钮时查找图像使用jquery parent
- python - 如果匹配,则需要匹配 2 个不同的 pandas 数据框的 2 列,我们需要附加新数据
- java - 再次调用时如何重新启动异步方法?