2

我正在尝试在 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>or <pthread.h>

如果我正在解析 Open Group 的2.2.1 POSIX.1 符号在 cygwin 的 features.h 中定义 _POSIX_SOURCE?_XOPEN_SOURCE正确地,定义to应该足够了600。从Open Group 文档中的“_XOPEN_SOURCE 功能测试宏”部分:

由于这卷 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 相同...

我在使用 gcc-5.4.0 编译 gnutls-3.3.17 时发现了一条与错误类似的过去消息,但它被报告为上游错误,并且似乎已修复。我认为它不适用于这里,因为 pthread 数据结构的使用没有明显的声明或定义。

任何人都可以确认事情(不是?)按预期工作吗?如果事情按预期工作,那么解决失败的提示将不胜感激。

提前致谢,

4

0 回答 0