【问题标题】:Syscall - sys/syscall.h - Not such file or directory -系统调用 - sys/syscall.h - 不是这样的文件或目录 -
【发布时间】:2014-06-02 18:41:27
【问题描述】:

我在哪里可以找到这个库? 编译器报告我:“不是这样的文件或目录”...... 我想调用这个库中包含的 syscall 函数...

【问题讨论】:

  • 您使用的是哪个操作系统? sys 中的任何内容都取决于平台; <sys/syscall.h> 应该存在于 Linux 和其他一些类似 Unix 的平台上,但不是无处不在。
  • 我不熟悉 Windows,但我很确定它没有相当于 Linux 系统调用。如果您需要与操作系统交互,您可能需要使用 Windows API。也许您可以更新问题,向我们展示您正在使用哪个系统调用以及原因,以便熟悉 Windows 的人可以向您展示该怎么做。

标签: c++ multithreading winapi system-calls


【解决方案1】:

Windows 没有<sys/syscall.h>。如果您尝试将某些内容从 Linux 移植到使用此功能的 Windows,那么您需要以下内容:

#if __linux
#include <sys/syscall.h>
#elif defined(_WIN32) || defined(_WIN64)
#include <windows.h>       // Or something like it. 
#endif

当然,您的代码很可能也无法单独使用这些更改进行编译,您还必须修复实际使用 &lt;sys/syscall.h&gt; 中声明的代码,这在很大程度上取决于具体是什么。

如果您对移植代码不太熟悉并且项目很大,我会检查是否有其他人对该项目进行了 Windows 移植,因为您可能会遇到困难。 Unix/Linux 环境中有很多东西与 Windows 的工作方式完全不同。

【讨论】:

  • b/w 定义的区别和定义在哪里使用定义的宏我只读过定义
  • defined 如果在该检查之前已定义符号,则将给出“真”值。 #if defined(X) 的缩写形式是 #ifdef X,这更常见,但 #ifdef X || Y 不起作用,您需要 #if defined(X) || defined(Y),因此在 #elif 案例中的构造。
猜你喜欢
  • 2015-08-20
  • 1970-01-01
  • 2019-08-12
  • 2021-08-14
  • 2013-08-03
  • 1970-01-01
  • 2021-07-10
  • 2014-12-07
  • 2018-08-27
相关资源
最近更新 更多