我一直在尝试在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进行相同的测试,保存文件并重新运行命令我得到相同的错误
我在阅读错误代码时遗漏了什么吗?
答案 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,
凯文