Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以';使用GCC编译的t程序可以使用DOSbox运行,而使用Borland(Turbo C)编译的程序可以?_C_Gcc_Turbo C_Dosbox - Fatal编程技术网

为什么可以';使用GCC编译的t程序可以使用DOSbox运行,而使用Borland(Turbo C)编译的程序可以?

为什么可以';使用GCC编译的t程序可以使用DOSbox运行,而使用Borland(Turbo C)编译的程序可以?,c,gcc,turbo-c,dosbox,C,Gcc,Turbo C,Dosbox,几年前,我使用TurboC IDE创建了一个程序,这个程序也可以使用。现在,当我尝试运行在DOSbox中使用GCC编译的任何程序时,出现以下消息: 此程序不能在DOS模式下运行 所以我的问题是,为什么不能在DOSbox中运行使用GCC编译的程序,而从TurboC编译的程序却可以 PS:我想在DOSbox中运行它们的原因是我想在我的手机(安装了DOSbox)中运行这些程序。因为MS DOS是16位操作系统,不支持32位程序。此外,现代操作系统对直接硬件访问有更严格的要求,因此现代程序必须通过一些硬

几年前,我使用TurboC IDE创建了一个程序,这个程序也可以使用。现在,当我尝试运行在DOSbox中使用GCC编译的任何程序时,出现以下消息:

此程序不能在DOS模式下运行

所以我的问题是,为什么不能在DOSbox中运行使用GCC编译的程序,而从TurboC编译的程序却可以


PS:我想在DOSbox中运行它们的原因是我想在我的手机(安装了DOSbox)中运行这些程序。

因为MS DOS是16位操作系统,不支持32位程序。此外,现代操作系统对直接硬件访问有更严格的要求,因此现代程序必须通过一些硬件抽象层工作,而这些硬件抽象层在MS DOS中也不存在。

有一个名为“DJGPP”的GCC发行版,它允许使用GCC编译程序,并使用DPMI实现这一点。Dos保护模式接口,基本上你必须在保护模式下运行程序。还有其他的C环境,比如Watcom,也做了同样的事情,但我认为Borland从来没有用它做过任何事情。

默认情况下,它们可能是用Windows控制台或32/64位可执行存根编译的。检查
gcc
的编译目标。(但我严重怀疑“MS DOS”是否仍然可用。)您想要一个DOS交叉编译器。您不能在主机系统上编译程序,而期望它在另一个完全无关的系统上运行。或者,在DOSBox中编译程序本身,尽管这听起来比它的价值要麻烦得多。@remyabel,如果您按照标准编写代码,避免任何扩展,难道您不应该期望它吗?@Chief保证(或者更确切地说,强制)跨编译器的可移植性,而不是跨系统的可移植性。二进制兼容性是另一个问题。