为 Windows 98 编写的 g++ 程序

6

我试图为一台运行 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++,因为它包含一些有问题的bug。
我还注意到,在旧计算机上用普通c(使用gcc 4.8.1版本编译)制作的类似程序也能正常工作,但我不想使用普通c,因为这需要重写很多c++代码。
所以问题是:我如何使用g++ 4.8.1(或更高版本)编译的c++程序在Windows 98机器上运行?

1
你尝试过安装Microsoft C++ Redistributable吗? - user3920237
不行。这是唯一的解决方法吗? - johanmaack
2个回答

2

迟到总比不到好

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

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

(我认为你那里指的是开发版本,可能你拥有的二进制版本更加现代)

奇怪的是,我记得以前使用Code::Blocks使用MinGW编译过可以在Windows 98上运行的构建,所以我下载了Code::Blocks版本17.12,并直接使用其中提供的MinGW编译了同样的exe,结果正常运行。

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

我不清楚MinGW编译器在Windows 98上能够使用哪个版本,但我将很快在他们的论坛上发布一篇帖子来讨论这个问题。

为了记录,我会展示我所做测试的图片。

测试是在MinGW 6.3.0-1版本上进行的:

oh no!

在MinGW(tdm-1)5.1.0上:

woo!

因此,回答这个问题:是的,您可以使用MinGW的g ++版本大于4.8.1(在某个版本之前,我会在论坛上寻求更多信息)来制作Windows 98的程序。

编辑:不需要了,找到了这个:

“默认模式对于GCC 6.1及以上版本为C++14,对于GCC 6.1以下版本为C++98。您可以使用命令行标志-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上运行良好。


1
Libgcc是一个特定于运行时的库,如果它丢失了,通常是用户的责任。假设静态链接已经被隐式启用,我可以想象一些条件阻止它工作,而较低的语言标准以某种不同的代码路径使用。无论如何,通过一点调整,即使是最新的mingw也没有理由不能工作。 - mirh

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接