C ++: Interix сигналы - PullRequest
       36

C ++: Interix сигналы

11 голосов
/ 20 января 2011

Как скомпилировать / использовать сигналы на платформе Interix ? Я не могу заставить его скомпилировать, потому что Interix, кажется, не POSIX-совместимый , по крайней мере, в его реализации signal.h.

Если кто-нибудь нашел способ обойти это и разрешить компиляцию кода с сигналами на Interix, пожалуйста, дайте мне знать, как!

Спасибо.


подробности:

Устаревшее программное обеспечение на C, C ++ и построено на Linux и Interix (для Win XP).

Я получаю следующие ошибки во время компиляции, только на Interix; не в Linux, после добавления 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 ]

1 голос
/ 23 января 2012

Согласно спецификации POSIX, там struct sigaction не имеет члена sa_sigaction, оно имеет sa_handler.

Interix является POSIX-совместимым в том случае, если портируемый вами код не является.

Обратите внимание, что Linux можно заставить работать с sa_handler.

Вы можете заставить его работать, используя правильные значения #DEFINE s.

0 голосов
/ 27 января 2011

См. Справочную страницу Interix и ссылку на открытую группу выше.

Вы можете заменить si_sigaction на sa_handler.

...