[pgsql-jp: 31903] Re: PostgreSQLモジュール作成エラーについて(HP-UX11.11)

tanabe @ bsp.co.jp tanabe @ bsp.co.jp
2004年 1月 6日 (火) 21:58:14 JST


田邉です。

ご回答ありがとうございました。
早くにメール頂いていたのに、遅くなってしまいましてすみません。

加藤さんにご指摘頂いて自分のconfig.logを見直していたのですが、
先日のメールは中略しすぎで意味の取れない質問になってしまっていたようです。
申し訳ありません。

> まずは /usr/include/sys/socket.h と利用しようとしているその他ヘッダファ
> イルの中で定義されているaccept()関数の引数を比較するのが一番かと。

まず、/usr/include/sys/socket.hの定義は

   #if defined(_XOPEN_SOURCE_EXTENDED) && !defined(_KERNEL)
      extern int accept __((int, struct sockaddr *, socklen_t *));
      (中略)
   #else  /* !_XOPEN_SOURCE_EXTENDED*/
      extern int accept __((int, void *, int *));
      (中略)
   #endif

のようになっています。

先日引用した部分ではacceptの型チェックでエラーが出ていたのですが、
その後も様々な組み合わせでチェックを行っていて、ずっと後の方で

   > configure:9624: gcc -c -O2   conftest.c >&5
   > In file included from configure:9604:
   > /usr/include/sys/socket.h:484: error: parse error before "sendfile"
   > /usr/include/sys/socket.h:484: error: parse error before "bsize_t"
   > /usr/include/sys/socket.h:486: error: parse error before "sendpath"
   > /usr/include/sys/socket.h:486: error: parse error before "bsize_t"
   > configure:9627: $? = 1
   > configure: failed program was:
   > #line 9599 "configure"
   > #include "confdefs.h"
   > #ifdef HAVE_SYS_TYPES_H
   > #include <sys/types.h>
   > #endif
   > #ifdef HAVE_SYS_SOCKET_H
   > #include <sys/socket.h>
   > #endif
   > extern int accept (int, void *, int *);
   > #ifdef F77_DUMMY_MAIN
   > #  ifdef __cplusplus
   >      extern "C"
   > #  endif
   >    int F77_DUMMY_MAIN() { return 1; }
   > #endif
   > int
   > main ()
   > {
   >
   >   ;
   >   return 0;
   > }

となっていました。
ですので、acceptはsocket.hの2番目の定義が有効で、チェックも成功していると思われ
ます。

そこで改めてsocket.h(484)〜(486)を見ると、

   >extern sbsize_t sendfile __((int, int, off_t, bsize_t,
   >                            const struct iovec *, int));
   >extern sbsize_t sendpath __((int, char *, off_t, bsize_t,
   >                            const struct iovec *, int));

に対して、config.logは

   > /usr/include/sys/socket.h:484: error: parse error before "sendfile"
   > /usr/include/sys/socket.h:484: error: parse error before "bsize_t"
   > /usr/include/sys/socket.h:486: error: parse error before "sendpath"
   > /usr/include/sys/socket.h:486: error: parse error before "bsize_t"

素直に読むとsbsize_t/off_tの型定義が通っていないように見えます。
しかし、confdefs.hに「#define HAVE_SYS_TYPES_H 1」があるので、
sbsize_t/off_tとも<sys/types.h>の中で定義されるはずなのですが...。
コンパイルスイッチ等を追加で指定する必要があるのでしょうか?

書いているうちに、C言語の、ごく基本的な話のような気もしてきましたが、
同じような経験のある方がおられましたら、情報お願いできますでしょうか。

宜しくお願い致します。

田邉 弥雅美(Miyabi Tanabe)
<tanabe @ bsp.co.jp>





pgsql-jp メーリングリストの案内