gpt4 book ai didi

c++ - 在 Windows 上编译的控制台应用程序可以使用 DOSBox 在 Linux 和 MAC OS X 上运行吗?

转载 作者:搜寻专家 更新时间:2023-10-31 01:11:06 26 4
gpt4 key购买 nike

疑惑

我已经在 Microsoft Visual C++ 2010 Express 中编写了一些代码:

#include<iostream>

int main()
{
system("cls");

char name[20];

cout<<"\nEnter your name:";

cin.getline(name,20);

system("pause");

cout<<"\nYour name is:"<<name;

system("pause");

return 0;

}

现在我已经编译好了,并把它发给了一个使用 Linux 机器的 friend 。他下载了 DOSBox 软件,然后运行这个程序。

疑问

它会像在我的机器上那样运行还是会产生任何问题?

为什么我会问这个?

我最近下载了一张 linux live CD 并在我的机器上运行它。我无法在这台机器上安装它,因为它是共享 PC。无论如何,我在终端中输入了 cls 却没有任何反应。我再次输入 pause 没有任何反应。所以我想知道我在上面的代码中传递给系统的命令“cls”是否真的会对 linux 机器产生任何影响。

最佳答案

这个程序不能在其他机器上运行的原因有几个 - 我将总结两个主要的:

  1. 您使用了其他操作系统不支持的系统指令。如果您尝试在不同的操作系统上运行这些指令,操作系统会提示它不理解它们并且程序会崩溃。

  2. (可能更重要的是,)您创建的 Windows 可执行文件是一个 Windows .exe 文件,即 Microsoft's Portable Executable format . Linux 只能读取 ELF format 中的可执行文件, 而 Mac OS X 使用 Mach-O format .

这两点本身就值得讨论,正如Joachim在评论中指出的,WINE模拟器在Linux上模拟windows环境相当不错,所以这可能是程序兼容性的一个选项。

编辑: 我应该在这里补充一点,第 1 点假设第 2 点已经被克服。第 2 点是一个操作系统上的可执行文件在其他操作系统上“不起作用”的原因。


对评论的回应:

一般来说,是的,ELF 文件是所有 Linux 发行版的标准(可能有一些罕见的异常(exception))。同样,PE 文件是所有 Windows 版本的标准文件。如果您拥有相对较新的 CPU,那么如果您在一个 Linux 发行版上编译可执行文件,那么它应该可以在其他发行版上运行。

这里的异常(exception)是,如果您在配备最新 CPU 的机器上编译程序,并希望在配备非常旧 CPU 的机器上运行它,那么旧 CPU 可能不支持编译器创建的某些指令。然而,如今只需使用默认设置编译程序通常就可以在所有 (Intel) CPU 上运行。如果您知道您的目标机器使用非常不同或更旧的 CPU,您可以添加 -march=...编译器选项,以便编译器生成一定能在目标机器上运行的指令。

最后,DOSBox 不是 Windows 模拟器,它是 DOS 模拟器。这两个系统尽管历史悠久,但却截然不同。 DOSBox 不是为运行 native Windows 应用程序而设计的,它是为运行 native DOS 应用程序而设计的(现在大部分都是 abandonware)。如果您想在 Linux 上运行 DOS 程序,例如 Dangerous Dave (我的怀旧最爱之一),那么你可以。但是,如果您希望运行 Windows 应用程序,则需要为此目的设计的模拟器,例如 WINE .

作为引用,DOS 使用过时的 MZ Executable format .

关于c++ - 在 Windows 上编译的控制台应用程序可以使用 DOSBox 在 Linux 和 MAC OS X 上运行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15242837/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com