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 文件。通常,头文件不应该直接提供给编译器。它们应该是 #include
d 到实现文件中。
但是,当 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 给我错误“程序太大而无法放入内存”的主要内容,如果未能解决你的问题,请参考以下文章
"Hello World " —— 深入理解程序从编译到执行
C/C++ 中的简单“Hello World”内联汇编语言程序