Cygwin で Emacs をビルドしようとしています。Cygwin は最新で、完全にパッチが適用されています。Newlib のおかげで、プラットフォームをテスト ベッドとして使用しています。Emacs は次のエラーで失敗します:
gcc -DHAVE_CONFIG_H -I. -I../lib -I../src -I../src
-I/usr/local/include -DNDEBUG -pthread -D_XOPEN_SOURCE=600 -m64 -MT
close-stream.o -MD -MP -MF .deps/close-stream.Tpo -c -o close-stream.o
close-stream.c
In file included from /usr/include/sys/signal.h:22:0,
from /usr/include/signal.h:6,
from ./signal.h:52,
from ./sys/select.h:107,
from /usr/include/sys/time.h:47,
from ./sys/time.h:39,
from ./sys/select.h:86,
from /usr/include/sys/types.h:68,
from ./sys/types.h:28,
from ./fcntl.h:50,
from binary-io.h:23,
from binary-io.c:3:
/usr/include/cygwin/signal.h:175:3: error: unknown type name ‘pthread_attr_t’
pthread_attr_t *sigev_notify_attributes; /* notification attributes */
^~~~~~~~~~~~~~
/usr/include/cygwin/signal.h
175 あたりを調べると、次のようになります。
typedef struct sigevent
{
sigval_t sigev_value; /* signal value */
int sigev_signo; /* signal number */
int sigev_notify; /* notification type */
void (*sigev_notify_function) (sigval_t); /* notification function */
pthread_attr_t *sigev_notify_attributes; /* notification attributes */
} sigevent_t;
signal.h
しかし、ヘッダー ファイルに pthread ギアのインクルードが見当たりません。ヘッダーは または のいずれかにする必要があると思い<sys/types.h>
ます<pthread.h>
。
Open Group の2.2.1 POSIX.1 シンボル
を解析し、cygwin の features.h で _POSIX_SOURCE を定義するとしたら? _XOPEN_SOURCE
に定義するだけで十分なはず600
です。Open Group docs の「The _XOPEN_SOURCE Feature Test Macro」セクションから:
このボリュームの IEEE Std 1003.1-2001 は ISO C 標準に準拠しているため、_POSIX_C_SOURCE を 200112L に設定することで有効になるすべての機能は、_XOPEN_SOURCE を 600 に設定することで有効になるため、_XOPEN_SOURCE がそのように定義されている場合は、_POSIX_C_SOURCE を定義する必要はありません。 . したがって、_XOPEN_SOURCE が 600 に等しく設定され、_POSIX_C_SOURCE が 200112L に等しく設定されている場合、動作は、_XOPEN_SOURCE のみが定義され、600 に等しく設定されている場合と同じです...
gnutls-3.3.17 with gcc-5.4.0 をコンパイルするときのエラーで、類似した過去のメッセージを 1 つ見つけましたが、それはアップストリームのバグとして報告され、修正されたようです。pthread データ構造は明らかな宣言や定義なしで使用されているため、ここでは当てはまらないと思います。
物事が期待どおりに機能していることを誰かが確認できますか? 期待どおりに動作している場合は、失敗を回避するためのヒントをいただければ幸いです。
前もって感謝します、