On my Linux system (Debian Jessie) ucontext.h
is in usr/include
which in turn includes sys/ucontext.h
which gcc
will find in usr/include/i386-linux-gnu/sys
. The first defines the functions getcontext
and setcontext
. The second defines the data structures ucontext_t
etc.
On the Windows host, VCLinux has installed a copy of the second ucontext.h
(which defines the data structures) in C:Program Files (x86)Microsoft Visual Studio 14.0VCLinuxincludeusrincludex86_64-linux-gnusys
. But the first ucontext.h
is not present.
VCLinux/Visual Studio will compile and run this program on the Linux remote:
#include <ucontext.h>
#include <iostream>
int main()
{
ucontext ucxt;
::getcontext (&ucxt);
std::cout << ucxt.uc_flags << std::endl;
return 0;
}
But IntelliSense will not know about the functions getcontext
and setcontext
or the associated data structures. So you will get little red squiggles under the names and no completion assistance.
You can take a copy of the first ucontext.h
and put it in C:Program Files (x86)Microsoft Visual Studio 14.0VCLinuxincludeusrinclude
on your Windows host. Then everything will work as it should. And you could raise an issue for the missing header on the VCLinux GitHub site.
Note: Windows paths are for Visual Studio 2015. They will be different for 2017.
Applies to VCLinux 1.0.6.
==============
Update 10-Apr-18
Microsoft have addressed the issue of differences in standard include file locations between Linux systems. As explained in this Visual C++ blog post, the headers specific to the GCC
setup are copied from the Linux remote and stored on the Windows host on a per-connection basis.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…