系统调用 - sys/syscall.h - 没有这个文件或目录 -

3
我该在哪里找到这个库呢?编译器报告我:“没有这样的文件或目录”...我想调用包含在这个库中的系统调用函数...

你使用的是哪个操作系统?sys 中的任何内容都依赖于平台;<sys/syscall.h> 应该存在于 Linux 和其他一些类 Unix 平台上,但不是所有地方都有。 - Mike Seymour
2
我不熟悉Windows,但我相当确定它没有Linux系统调用的等价物。如果你需要与操作系统交互,你可能需要使用Windows API。也许你可以更新问题,展示一下你正在使用哪个syscall以及为什么这样做,这样熟悉Windows的人就可以向你展示应该怎么做。 - Mike Seymour
1个回答

3

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

当然,只做这些更改很可能无法使您的代码编译通过,您还需要修复实际使用 <sys/syscall.h> 声明的代码,具体取决于该声明的内容。
如果您对代码移植并不熟悉,而该项目又很大,我建议您检查是否有其他人已经将该项目移植到了Windows系统,因为Unix/Linux环境中有很多与Windows运作方式非常不同的东西。

定义和宏定义有什么区别?在哪里使用已定义的宏?我只是读过关于宏定义的内容。 - HELP PLZ
1
如果符号在检查之前已经被定义,defined将返回一个"true"值。#if defined(X)的简写形式是#ifdef X,这更为常见,但#ifdef X || Y不起作用,你需要使用#if defined(X) || defined(Y),因此在#elif情况下使用该结构。 - Mats Petersson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接