当前位置: 首页 > 面试题库 >

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

司寇阳曦
2023-03-14
问题内容

在这种情况下,在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主机上的。



 类似资料:
  • 问题内容: 我有一个新安装的Web应用程序。因为有一个下拉菜单,其中一个选项是。我要做的就是将其更改为。因此,我导航至应用程序文件夹并尝试了以下命令。 我最终遇到以下错误。 鉴于我正在使用 如何在Linux中grep’—‘? 问题答案: 发生这种情况是因为解释是一个选项,而不是要查找的文本。而是使用: 这样,您就可以知道其余的不是命令行选项。 其他选项: 使用: 使用或: 防止打印行(其默认操作)

  • 我想将dir中的环境文件从本地计算机复制到远程计算机。 根据这个答案,我尝试了以下方法,但得到了一个错误: 编辑2:以下是工作原理

  • 问题内容: 我已经将现有的maven项目导入Eclipse。我试图为JUnit测试设置配置,但是我的项目不会成为可测试项目。当我手动输入项目名称时,收到以下消息: 指定的项目不是Java项目 我还注意到,在键入代码并尝试调用诸如“ System.out”之类的方法时,输入句点时会弹出一条消息,提示: 该编译单元不在Java项目的构建路径上 此外,右键单击项目并导航到“构建路径”时,没有可用的操作。

  • 突然之间,网络Storm对我来说不认识Javascript了。 如果我添加这样的文件: 之后我在IDE中看到的是: 如果我刷新,重新启动Webstorm,它仍然无法识别文件!网络Storm已无法使用!

  • 问题内容: 我有以下Python代码可删除目录中的文件。由于某种原因,我的.svn目录未被识别为目录。 我得到以下输出: .svn不是目录 任何想法,将不胜感激。 问题答案: 您需要在检查之前创建完整路径名:

  • 第一个模块 sonar.modulekey=com.app.core.pdf:pdf-utils sonar.projectbasedir=/var/lib/jenkins/workspace/myproject/pdf-utils sonar.projectkey=com.app.core.pdf:pdf-utils sonar.projectname=pdf-utils sonar.proje