在Visual Studio 2017 Linux项目中无法识别Linux头文件

在这种情况下,在包含Linux头文件ucontext.h的情况下,在C程序的Visual Studio 2017的Linux C ++项目中,它无法识别头文件。 即使包含了sys / ucontext.h,它也不能识别我应该可以用于ucontext_t对象的函数,比如getContext()和setContext() 。 我不应该在Linux C ++项目中使用这些函数吗?

我正在写的代码:

#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() } 

在我的Linux系统(Debian Jessie)上, ucontext.h位于usr/include ,它包含sys/ucontext.hgcc会在usr/include/i386-linux-gnu/sys 。 第一个定义了函数getcontextsetcontext 。 第二个定义了数据结构ucontext_t

在Windows主机上,VCLinux在C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\Linux\include\usr\include\x86_64-linux-gnu\sys安装了第二个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网站上提出缺少头文件的问题。

注意:Windows路径适用于Visual Studio 2015,2017年将有所不同。

适用于VCLinux 1.0.6。