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

在这种情况下,在Visual Studio 2017上针对我的C程序的Linux C

项目中包含Linux头文件ucontext.h时,它无法识别该头文件。即使当我包含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.h内容gcc将在中找到usr/include/i386-linux-

gnu/sys。第一个定义功能getcontextsetcontext。第二个定义数据结构ucontext_t等。

在Windows主机上,VCLinux在中安装了第二个副本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不会知道功能getcontext和/

setcontext或关联的数据结构。因此,您将在名称下看到很少的红色弯曲,并且没有完成帮助。

您可以复制第一个副本ucontext.h并将其C:\Program Files (x86)\Microsoft Visual Studio

14.0\VC\Linux\include\usr\include放在Windows主机上。这样,一切都会正常进行。您可能会在VCLinux

GitHub站点上引发缺少标题的问题。

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

适用于VCLinux 1.0.6。

==============

更新18年4月10日

Microsoft已解决Linux系统之间标准包含文件位置差异的问题。如该Visual C

++博客文章中所述,特定于GCC安装程序的标头是从Linux远程复制并按每个连接存储在Windows主机上的。

以上是 在Visual Studio 2017 Linux项目中无法识别Linux头文件 的全部内容, 来源链接: utcz.com/qa/429011.html

回到顶部