1

しばらくの間、AIX で netcat.c をコンパイルしようとしましたが (コマンドを使用してmake aix)、コンパイラは次のような奇妙なフィードバックを返します。

"netcat.c"、117.12 行目: 1506-275 (S) 予期しないテキスト 'int' が見つかりました。

ファイル netcat.c の 117 行目をチェックすると、次の行が見つかります (以下のコードの 2 行目)。

#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行ほどなど、もう少しコンテキストを指定する必要があります。

古いxlcを使用しているgcc場合、そのボックスで実行することをお勧めします。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 行目から #include "generic.h" 宣言のすぐ下にある 30 行目に移動しました。これにより、xlc がコンパイルできるようになりました。(S)構文エラー メッセージはなくなり、いくつかの (警告)メッセージが表示されますが、最後に nc バイナリが表示されます!

h番目、

ケビン

于 2012-12-20T05:37:52.577 に答える