在AIX上编译netcat

时间:2010-05-22 10:30:30

标签: c makefile aix netcat

我一直在尝试在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 个答案:

答案 0 :(得分:3)

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

i = i + 1;
int x;

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

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

答案 1 :(得分:1)

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

另请注意,较早行上的问题(缺少分号等)可能会在以后的行中生成错误消息。

答案 2 :(得分: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

编译顺利进行。

答案 3 :(得分:0)

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

HTH,

凯文