1

我一直在尝试在 AIX 上编译 netcat.c 一段时间(使用命令make aix),但是编译器给了我一些奇怪的反馈,例如:

“netcat.c”,第 117.12 行:1506-275 (S) 遇到意外的文本“int”。

在第 117 行检查文件 netcat.c 时,我会找到该行(下面代码中的第二行):

#ifdef HAVE_BIND
extern int h_errno;
/* stolen almost wholesale from bsd herror.c */

即使我将 int 更改为 char 以进行相同的测试,保存文件并重新运行命令我也会得到相同的错误

我在阅读错误代码时遗漏了什么?

4

4 回答 4

3

如果您正在使用xlc(尤其是较旧的),它通常是由语句后的声明引起的,例如:

i = i + 1;
int x;

您可能需要给我们更多的上下文,例如错误行之前的 10 行左右。

gcc如果您使用的是较旧的 xlc,我的建议是在该盒子运行。IBM 现在制作了一些优秀的编译器,但早期的编译器并没有那么火爆(在我看来)。

于 2010-05-22T10:45:06.327 回答
1

当看似无辜的代码产生奇怪的错误时,请尝试通过 C 预处理器阶段运行代码,然后查看它。有时宏会做一些非常有趣的事情。

另请注意,前一行的问题(缺少分号等)可能会在后一行产生错误消息。

于 2010-05-22T10:41:58.177 回答
1

该帖子可能已经有点过时了,但以防万一其他人遇到同样的问题......

这里 (AIX 7.1) h_errno 被定义为 netdb.h 中的宏。

/usr/include/netdb.h:#define h_errno   (*(int *)h_errno_which())

因此 netcat.c 第 117 行中的声明不起作用。

我只是将线路更改为

#ifndef h_errno
extern int h_errno;
#endif

并且编译工作顺利。

于 2016-06-07T09:17:58.293 回答
0

@A.Rashad,我将 HAVE_BIND #ifdef 块从第 117 行移到第 30 行,它位于 #include "generic.h" 声明的下方。这允许 xlc 编译它。(S) 语法错误消息消失了,虽然有一些 (W) 警告消息,但最后我确实得到了一个 nc 二进制文件!

h,

凯文

于 2012-12-20T05:37:52.577 回答