Linuxのヘッダーファイルucontext.hをこのC++プログラムのVisual Studio 2017のLinux C++プロジェクトに含めると、ヘッダーファイルが認識されません。 sys/ucontext.hをインクルードしても、getContext() and setContext()のようにucontext_tオブジェクトに使用できるはずの関数は認識されません。 Linux C++プロジェクトでこれらの関数を使用することはできませんか?Visual Studio 2017 LinuxプロジェクトでLinuxヘッダーファイルが認識されない
コード私は書いている:私のLinuxシステム(Debianのジェシー)ucontext.h
が順番にgcc
がusr/include/i386-linux-gnu/sys
で見つけるsys/ucontext.h
含まusr/include
であるオン
#include <stddef.h>
#include <string.h>
#include <sys/ucontext.h>
// If I use ucontext.h instead, it gives the error: cannot open source file ucontext.h
//TCB structure
typedef struct TCB_t {
struct TCB_t *next;
struct TCB_t *prev;
ucontext_t context;
} TCB_t;
void init_TCB(TCB_t *tcb, void *function, void *stackP, int stack_size)
{
memset(tcb, '\0', sizeof(TCB_t));
tcb->context.uc_stack.ss_sp = stackP;
tcb->context.uc_stack.ss_size = (size_t)stack_size;
int c = getcontext(tcb->context); // Cannot resolve field getcontext()
}
あなたはC++でプログラミングしているかもしれませんが、C++コンパイラを使っているかもしれませんが( 'c'タグのように見えません)、関数と構造体はまだCの関数と構造体です。 Cにはメンバー関数はなく、グローバルスコープ内のスタンドアロンの非メンバー関数のみです。リンクされたリファレンスをもう一度読んで、関数が引数*のために取るものを書き留めておくことをお勧めします。 –
ああ、最後の行が間違っていて、それを変更しました。だから最初に、私はVSタグのLinux C++プロジェクトとして書いているCプログラムですので、私はcタグを使用しました。私はいくつかの研究の後にCプログラムとしてコンパイルすることを理解しています。さて、私が実際に質問したところでは、Cにメンバー関数がないので、Linux C++プロジェクトはLinuxにCライブラリを含めることができません。それとも私はそれを誤解していますか? – parion
'getcontext'は引数として' ucontext_t'へのポインタを引数としてとります。また、構造体を初期化するので、構造体を呼び出した後でおそらく 'uc_stack'を変更する必要があります。 –