C++: Interix сигналы
Как скомпилировать / использовать сигналы на платформе Interix? Я не могу заставить его скомпилировать, потому что Interix кажется не POSIX-совместимым, по крайней мере, в его реализации signal.h
,
Если кто-нибудь нашел способ обойти это и позволить скомпилировать код с сигналами на Interix, пожалуйста, дайте мне знать, как!
Благодарю.
Подробности:
Устаревшее программное обеспечение на C, C++ и построено на Linux и Interix (для Win XP).
Получаю следующие ошибки во время компиляции, только на Interix; не в линуксе, после добавления pthread
а также signal
код. Не можете использовать pthreads
без сигналов, потому что конфликтует с Xmotif (компилируется, но падает во время выполнения).
ошибки из-за структурных различий:
`struct siginfo' has no member named `si_value'
aggregate `sigval val' has incomplete type and cannot be defined
`struct sigaction' has no member named `sa_sigaction'
ошибки из-за необъявленных:
`sigqueue' undeclared
`SA_NODEFER' undeclared
`SA_SIGINFO' undeclared
Другие материалы проконсультированы:
http://www.mail-archive.com/bug-gnulib@gnu.org/msg10425.html
http://www.gnu.org/software/hello/manual/gnulib/signal_002eh.html
http://en.wikipedia.org/wiki/Interix
http://www.opengroup.org/susv3xbd/signal.h.html
2 ответа
Согласно спецификации POSIX, есть struct sigaction
не имеет члена sa_sigaction
, она имеет sa_handler
,
Interix является POSIX-совместимым в том случае, если код, который вы переносите, - нет.
Обратите внимание, что Linux можно заставить работать с sa_handler
,
Возможно, вы сможете заставить его работать, используя правильный #DEFINE
хотя.
См. Справочную страницу Interix и ссылку на открытую группу выше.
Вы можете заменить si_sigaction на sa_handler.