我正在尝试在 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 数据结构的使用没有明显的声明或定义。
任何人都可以确认事情(不是?)按预期工作吗?如果事情按预期工作,那么解决失败的提示将不胜感激。
提前致谢,