2017-03-25 17 views
2

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が順番にgccusr/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() 
} 
+0

あなたはC++でプログラミングしているかもしれませんが、C++コンパイラを使っているかもしれませんが( 'c'タグのように見えません)、関数と構造体はまだCの関数と構造体です。 Cにはメンバー関数はなく、グローバルスコープ内のスタンドアロンの非メンバー関数のみです。リンクされたリファレンスをもう一度読んで、関数が引数*のために取るものを書き留めておくことをお勧めします。 –

+0

ああ、最後の行が間違っていて、それを変更しました。だから最初に、私はVSタグのLinux C++プロジェクトとして書いているCプログラムですので、私はcタグを使用しました。私はいくつかの研究の後にCプログラムとしてコンパイルすることを理解しています。さて、私が実際に質問したところでは、Cにメンバー関数がないので、Linux C++プロジェクトはLinuxにCライブラリを含めることができません。それとも私はそれを誤解していますか? – parion

+0

'getcontext'は引数として' ucontext_t'へのポインタを引数としてとります。また、構造体を初期化するので、構造体を呼び出した後でおそらく 'uc_stack'を変更する必要があります。 –

答えて

4

。最初の関数はgetcontextsetcontextです。 2番目のデータ構造は、ucontext_tなどです。

(Windowsのホストでは、ucontext.hのコピーがC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\Linux\include\usr\include\x86_64-linux-gnu\sysにインストールされています)。しかし、最初のucontext.hは存在しません。

VCLinux/Visual Studioは、Linuxのリモート上で、このプログラムをコンパイルして実行します:

#include <ucontext.h> 
#include <iostream> 
int main() 
{ 
    ucontext ucxt; 
    ::getcontext (&ucxt); 
    std::cout << ucxt.uc_flags << std::endl; 
    return 0; 
} 

しかし、IntelliSenseが機能getcontextsetcontextまたは関連するデータ構造について知ることができません。そうすれば、名前の下に赤い小塊ができ、補完の助けもなくなります。

最初のucontext.hのコピーをとり、WindowsホストのC:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\Linux\include\usr\includeに置くことができます。そうすれば、すべてがうまくいくはずです。そして、VCLinux GitHub siteのヘッダーの欠落に関する問題を提起することができます。

注:Windowsのパスは、Visual Studio 2015のために彼らは

2017年はVCLinux 1.0.6に適用するために異なるものになりますされています。

+0

はい。それはコンパイルする。 IntelliSenseだけです。 VS 2017の欠落しているヘッダーを追加するフォルダは次のとおりです。C:¥Program Files(x86)¥Microsoft Visual Studio¥2017¥Community¥Common7¥IDE¥VC¥Linux¥include¥usr¥include –

関連する問題