C & MinGW:Hello World 给我错误“程序太大而无法放入内存”

Posted

技术标签:

【中文标题】C & MinGW:Hello World 给我错误“程序太大而无法放入内存”【英文标题】:C & MinGW: Hello World gives me the error "programm too big to fit in memory" 【发布时间】:2012-09-23 09:36:39 【问题描述】:

我是新来的。这是我的问题:

我在配备 Intel Atom CPU N550、1.50GHz 和 2GB RAM 的 Windows 7 Home Premium 32 位上网本上安装了 MinGW。

现在我创建了一个名为 hello.h 的文件,并尝试通过 CMD 使用以下命令对其进行编译: "gcc c:\workspace\c\helloworld\hello.h -o out.exe"

它编译没有错误,但是当我尝试运行 out.exe 时,它​​给了我以下错误: “程序太大而无法放入内存”

我检查过的东西:

我已将“C:\MinGW\bin”添加到 Windows PATH 变量中 我已经用谷歌搜索了大约一个小时,但自从我是新手以来,我不能 真正找出问题所在。 我在我的 64 位机器上编译了相同的代码,编译 完美,但由于 64 位 16 位有问题而无法运行。

如果有人能弄清楚问题所在,我将不胜感激。顺便说一句,这是我的 hello.h:

#include <stdio.h>

int main(void)
    printf("Hello, World\n");

...就是这样。感谢您的回复。 干杯,鲍里斯

【问题讨论】:

可能不是问题的原因,但您应该将源文件命名为hello.c 而不是hello.h.h 文件用于 #include 在其他文件中(通常主要是声明),而 .c 文件包含实际实现(定义)。 我刚刚测试了这个。如果我也在 mingw 下使用 .h 扩展名编译它,我会收到奇怪的错误。 天哪,怎么可能?我真的那么笨吗? :) 将扩展名更改为 *.c 修复了它。非常感谢! MinGW GCC 不支持创建 16 位应用程序。 Plain MinGW 生成 32 位应用程序,在 64 位 Windows 上运行良好。 【参考方案1】:

只需将文件重命名为 hello.c

.h 文件是 C 编程中的标头,您应该在其中放入一些诸如签名之类的内容,并且方法的主体应该在 .c 文件中

【讨论】:

那么 MinGW 做了什么导致这种奇怪的行为?【参考方案2】:

默认情况下,带有.h 扩展名的文件被GCC 视为header 文件。通常,头文件不应该直接提供给编译器。它们应该是 #included 到实现文件中。

但是,当 GCC 看到一个头文件被直接提供给它时​​,它实现了一个特殊的功能。在命令行中指定.h 文件会使GCC 将其解释为为.h 文件生成预编译头文件 的请求。通过使用-o 选项,您强制编译器为生成的预编译头文件指定特定名称out.exe

尽管如此,生成的文件不是可执行文件,而是预编译的头文件。您可以在十六进制编辑器中打开它,看到它以gpch 开头,这是一个 GCC 的预编译器头签名。任何“执行”该文件的尝试都将导致毫无意义的结果。 (这基本上就像尝试将一个完全随机的文件重命名为 .exe 扩展名,然后“运行”它。)

【讨论】:

【参考方案3】:

为了解决这个问题,您必须将 C:\TDM-GCC-32\bin 添加到 %PATH% 变量中。对于我在 E: 上,所以它将是:E:\TDM-GCC-32\bin步骤:1.复制TDM-GCC\bin文件夹路径

2.打开计算机属性

3.导航到高级

4.点击环境变量按钮

5.选择变量 PATH 并单击编辑按钮

6.在末尾附加复制的 TDM-GCC 路径。不要忘记分号。

完成所有这些步骤后,点击 Ok、Ok、Apply、Ok。一切就绪!

这是命令提示符中的结果:

【讨论】:

以上是关于C & MinGW:Hello World 给我错误“程序太大而无法放入内存”的主要内容,如果未能解决你的问题,请参考以下文章

&quot;Hello World &quot; —— 深入理解程序从编译到执行

C/C++ 中的简单“Hello World”内联汇编语言程序

在 openSUSE 上用 C 语言在 mpi 中编译 hello world 程序时出错

C指针原理-AT&T汇编

day1

在 Windows 的 Eclipse C++ 中运行 Hello World 应用程序