Sek*_*har 15 c c++ executable native
据说通过使用C/C++,可以编写在平台上运行的"本机"程序.我对被认为是原生的东西感到困惑 - 处理器架构还是操作系统版本?
例如:
我有一个32位处理器和Windows 7(32位),我编译并生成和.exe文件.它可以保证在任何Windows 7 32位上运行吗?(在32/64位机器上赢7位32位)
Edit1:我不打算在这里只安装Windows操作系统.我的例子也可以扩展到Linux.例如,a.out
在32位处理器上运行的32位Linux OS上生成可执行文件(默认情况下),然后在64位处理器上的32位Linux上运行它.
Edit2:感谢您的回复,但我还打算使用标准库和函数 - 没有特定于操作系统.只是ANSI或ISO C++标准规定的一次.没有对OS特定窗口系统或其他库的引用.谢谢
Meh*_*ari 20
都; 的种类.
实际指令在Windows和Linux之间并没有真正的不同,因为它们是针对单CPU架构(x86)编译的.
但是,二进制文件不仅仅是在裸硬件上运行的代码.例如,它还包含告诉操作系统如何加载可执行文件及其依赖项的信息.二进制文件以特定格式打包.这种格式在不同的操作系统中可能不同.
除此之外,操作系统还为应用程序提供了一些服务(通过系统调用和API).操作系统提供的服务及其使用方式因操作系统而异.
这些原因导致了这样一个事实,即本机二进制文件大多数时候都依赖于它编译的操作系统和CPU架构.
回答更新的问题:
C++ Standard不需要编译目标的性质.它只是在源级别指定兼容性要求.因此,如果您坚持使用标准库,您将能够使用相同的源代码在提供符合C++实现的平台上进行编译.该标准没有说明二进制可移植性.如上所述,操作系统提供的原始系统调用可能会有所不同,标准库的实际实现取决于操作系统提供的系统调用方式.
为了在Linux上运行Windows二进制文件,您需要使用某种类似于Wine的仿真,它可以理解Windows二进制格式并为应用程序模拟Windows API.