代码之家  ›  专栏  ›  技术社区  ›  A.Rashad

在AIX上编译netcat

  •  1
  • A.Rashad  · 技术社区  · 15 年前

    我已经尝试在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 回复  |  直到 15 年前
        1
  •  3
  •   paxdiablo    15 年前

    如果你用的是 xlc (尤其是旧的),通常是由语句后的声明引起的,比如:

    i = i + 1;
    int x;
    

    gcc 使用旧的xlc。IBM现在制造了一些很好的编译器,但早期的编译器并不是那么火爆(在我看来)。

        2
  •  1
  •   Artelius    15 年前

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

        3
  •  1
  •   danieljm    9 年前

    这篇文章可能已经有点过时了,但以防万一其他人也有同样的问题。。。

    这里(AIX7.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
    

        4
  •  0
  •   kkw    12 年前

    @A.Rashad,我将HAVE#BIND#ifdef块从第117行移到了第30行,它就在#include“generic.h”声明下面。这允许xlc编译它。语法错误消息不见了,虽然有一些警告消息,但我在最后得到了一个nc二进制文件!

    嗯,