4

我正在尝试为运行 Windows 98 第二版的旧计算机制作程序,但它们无法运行。

这些程序是用 c++ 编写的,它们是用安装在 Windows Vista 计算机上的 MinGW(g++ 版本 4.8.1)编译的。为了测试,我尝试了这个简单的 Hello World 程序:

#include <iostream>

using namespace std;

int main(){
    cout <<"hello world";
    return 0;
}

为了编译,我使用了这个命令:

g++ hello.cpp -o hello.exe

尝试在 Windows 98 计算机上运行此程序时,我收到以下消息:

A required .DLL file, LIBGCC_S_DW2-1.DLL, was not found.

因此,为了使可执行文件尽可能独立于 dll 文件,我尝试使用以下命令编译程序:

g++ hello.cpp -static -o hello.exe

但在 Windows 98 计算机上尝试该程序时,我现在收到消息:

The hello.exe file is linked to missing export MSVCRT.DLL:_fstat64

为了分析问题,我尝试了一些方法。而且我注意到,使用 g++ 2.95.2 版使用相同的命令编译相同的代码,该程序能够在 Windows 98 机器上运行。但是,我不希望使用这个旧版本的 g++,因为它包含一些有问题的错误。

我还注意到,用普通 c 编写的类似程序(使用 gcc 4.8.1 版编译)在旧计算机上也能正常工作,但我不希望使用普通 c,因为这需要重写大量 c++ 代码。

所以问题是:如何让使用 g++ 4.8.1(或更高版本)编译的 c++ 程序在 Windows 98 机器上运行?

4

2 回答 2

1

迟到但总比没有好

发现更高版本的 MinGW 无法在 Windows 98 上运行,给出错误“找不到所需的 .DLL 文件 LIBGCC_S_DW2-1.DLL”。

我尝试并给出错误的MinGW版本是这个(6.3.0-1) 新版MinGW

(我认为您指的是那里的开发版本,可能您拥有的 bin 版本更现代)

奇怪的是,我记得以前我使用在 Windows 98 中运行的 MinGW 使用 Code::Blocks 编译了一个构建,所以我下载了 Code::Blocks 版本 17.12,并使用那里直接提供的 MinGW 编译了相同的 exe,并且工作正常美好的

并注意到它是一个相当旧的版本((tdm-1)5.1.0) 旧版本的 MinGW

idk 是在 windows 98 上工作的最新版本的 MinGW 编译,我很快会在他们的论坛上写一篇关于它的帖子

作为记录,我将展示我所做的测试的照片

在 MinGW 6.3.0-1 上:

不好了!

在 MinGW (tdm-1) 5.1.0 上:

呜!

所以,回答这个问题;是的,您可以使用高于 4.8.1 版本的 MinGW 的 g++ 制作适用于 windows 98 的程序(直到某个版本,我会在论坛中询问更多信息)

编辑:不需要,发现这个:

“对于 6.1 之前的 GCC 版本,默认模式是 C++98,对于 GCC 6.1 及更高版本,默认模式是 C++14。您可以使用命令行标志 -std 显式指定 C++ 标准。例如,

-std=c++98, or -std=gnu++98 (C++98 with GNU extensions)
-std=c++11, or -std=gnu++11 (C++11 with GNU extensions)
-std=c++14, or -std=gnu++14 (C++14 with GNU extensions), default mode for GCC 6.1 and above.
-std=c++17, or -std=gnu++17 (C++17 with GNU extensions), experimental.
-std=c++2a, or -std=gnu++2a (C++2a with GNU extensions), experimental."

我在 6.3.0-1 编译器中添加了 -std=c++98 -std=gnu++98 标志,它在 Windows 98 SE 上运行良好

于 2018-06-14T04:19:51.877 回答
0

通常可以通过安装 IE4 找到 msvcrt.dll
http://gnuwin32.sourceforge.net/packages/gcc.htm

于 2016-03-20T23:12:45.017 回答