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

Gri*_* W. 4 c linux visual-studio visual-studio-2017

当我的 C 程序在 Visual Studio 2017 上的 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()
}
Run Code Online (Sandbox Code Playgroud)

Jom*_*oma 5

在这个答案中,要执行以下操作,您需要 Visual Studio Community 2017 15.9.7+ - 在 Visual Studio Enterprise 2019 Preview 4 上测试了此解决方案。

Visual Studio 需要下载本地计算机中的所有远程标头,以确保智能感知的正确行为。

新方法“rsync_ssh”不会下载所有标头。您可以通过 sftp_ssh 使用旧方法 .zip。

0.添加远程连接。
工具->选项->跨平台->连接管理器

1.从“工具”->“选项”->“跨平台”->“连接管理器”->“远程标头 Intellisense Manager”中选择您的连接更新。接下来单击探索按钮。

图像

2. C:\Users[YourUser]\AppData\Local\Microsoft\Linux\HeaderCache\1.0[IdNumber] 将 HeaderCache settings.xml.unused 文件重命名为 settings.xml

图像

3.在settings.xml 文件中,将syncMethod 更改为sftp_ssh。

图像

4.从“工具”->“选项”->“跨平台”->“连接管理器”->“远程标头 Intellisense Manager”更新标头缓存。 5.享受。

图像

图像

图像

图像