【问题标题】:I included necessary header file but get "error: gai_strerrorA was not declared in this scope", ubuntu16.04, g++ 5.5我包含了必要的头文件,但得到“错误:gai_strerrorA 未在此范围内声明”,ubuntu16.04,g++ 5.5
【发布时间】:2021-03-05 23:21:34
【问题描述】:

我现在正在将在寡妇上运行的代码移至 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, 整数,整数):

source/sSocket2.cpp:125:68: 错误:gai_strerrorA 未在 这个范围 printf("[err] getaddrinfo: %s[%d] (%s, %d)\n", gai_strerrorA(ret), ret, server_addr, port);

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

【问题讨论】:

  • 您链接到的手册页提到了gai_strerror,但没有提到gai_strerrorAWindows 中有一个gai_strerrorA 函数,它是标准gai_strerror 函数的Windows 特定扩展。
  • @Someprogrammerdude 啊,就是这样。我是多么愚蠢.. :) 谢谢!
  • @Someprogrammerdude 我将 gai_strerrorA 更改为 gai_strerror,现在它消失了。 (如果您将评论作为答案,我会选择它)

标签: c++ linux sockets compiler-errors g++


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    相关资源
    最近更新 更多