4

Linux プラットフォームは Ubuntu 12.04 です。

ソースコードに次のヘッダーが含まれています。

#include <unistd.h>
#include <signal.h>
#include <ucontext.h>

...

ただし、コンパイルすると、文句を言います/usr/include/x86_64-linux-gnu/sys/ucontext.h:139:5: error: unknown type name 'stack_t'

stack_tで定義する必要があることをグーグルで検索しましたsignal.hが、ここでは定義されていないようです?

4

2 に答える 2

3

SUS v2 (1997) によると、 http : //pubs.opengroup.org/onlinepubs/7908799/xsh/ucontext.h.htmlstack_tで定義する必要があります。<signal.h>

型 sigset_t および stack_t は のように定義されています。

http://pubs.opengroup.org/onlinepubs/007908799/xsh/signal.h.html

ヘッダーは、少なくとも次のメンバーを含む構造体として stack_t 型を定義します。

void     *ss_sp       stack base or pointer
size_t    ss_size     stack size
int       ss_flags    flags

タイプは glibc ドキュメントにもリストされています: http://www.gnu.org/software/libc/manual/html_node/Signal-Stack.html

データ型: stack_t

この型はsigaltstack関数で使用され、次のように説明されます。

sigaltstack は新しいインターフェースで、4.4 BSD から来ています。...

sigaltstackまた、 (バージョン 2015-07-23)の公式 Linux マニュアル ページには次のように記載されています

glibc の機能テスト マクロ要件 ( feature_test_macros(7)を参照):

   sigaltstack():
       _BSD_SOURCE || _XOPEN_SOURCE >= 500 ||
       _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
       || /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L

POSIX.1-2001、POSIX.1-2009、SUSv2、SVr4 に準拠。

したがって、2.12 より新しい glibc を使用する場合は、いくつかのマクロを使用できるように定義する必要がありsigaltstackますstack_t。glibc 2.10 以降では#define _GNU_SOURCE、enable_BSD_SOURCE_POSIX_C_SOURCE = 200809L

于 2015-09-26T14:27:42.023 に答える