不执行C++;程序还包含系统调用的目标代码 < >我们使用Linux系统调用,如 For()/,>代码> pthRead()/代码>,信号()> 等,在 c>强>或C++程序中编译程序生成可执行文件(A.OUT)。现在我的疑问是文件a.out是否包含所使用的所有linux系统调用的目标代码,或者可执行文件是否只包含对系统函数的调用,并且系统调用函数是否在运行时链接?假设我将a.out文件移动到其他Linux操作系统,该系统以不同的语法实现系统调用,并尝试编译它,它会工作吗? 我的疑问是系统调用函数定义是否是.out文件的一部分?

不执行C++;程序还包含系统调用的目标代码 < >我们使用Linux系统调用,如 For()/,>代码> pthRead()/代码>,信号()> 等,在 c>强>或C++程序中编译程序生成可执行文件(A.OUT)。现在我的疑问是文件a.out是否包含所使用的所有linux系统调用的目标代码,或者可执行文件是否只包含对系统函数的调用,并且系统调用函数是否在运行时链接?假设我将a.out文件移动到其他Linux操作系统,该系统以不同的语法实现系统调用,并尝试编译它,它会工作吗? 我的疑问是系统调用函数定义是否是.out文件的一部分?,linux,c++11,executable,system-calls,Linux,C++11,Executable,System Calls,用户空间二进制文件不包含系统调用的实现。这意味着任何用户都可以将任何代码注入内核并接管系统 相反,它们需要通过使用处理器中断或特殊指令切换到内核模式。然后处理器可以从内核执行系统调用实现 通常使用用户空间库,例如libc,它提供存根,将系统调用的参数转换为适当的协议,并触发跳转到内核模式。它通常是动态链接的,因此这些存根也不会出现在可执行文件中。系统调用是系统调用,您的代码(和可执行文件)只需调用它们(使用正确的参数)。如果两个不同的操作系统实现了相同的系统调用集,那么您的程序是可移植的,否则就

用户空间二进制文件不包含系统调用的实现。这意味着任何用户都可以将任何代码注入内核并接管系统

相反,它们需要通过使用处理器中断或特殊指令切换到内核模式。然后处理器可以从内核执行系统调用实现


通常使用用户空间库,例如
libc
,它提供存根,将系统调用的参数转换为适当的协议,并触发跳转到内核模式。它通常是动态链接的,因此这些存根也不会出现在可执行文件中。

系统调用是系统调用,您的代码(和可执行文件)只需调用它们(使用正确的参数)。如果两个不同的操作系统实现了相同的系统调用集,那么您的程序是可移植的,否则就不是。这个问题毫无意义。您没有尝试编译
a.out
。它已经被编译了。如果你已经有了一个已编译的可执行文件,它确实与语法无关。亲爱的n.m.和coffeeandcode我知道a.out是可执行文件,我知道它是如何生成的。我只是问它是否也包含系统调用的目标代码。请把这篇文章再读一遍。谢谢你的回复谢谢你们所有人宝贵的answers@CharanChakravarthy,如果您认为它解决了您的问题,您可以将其标记为已接受的答案。