VC6.0的一个编译错误:fatal error C1001: INTERNAL COMPILER ERROR。

最近在编译一个VC6.0工程(开发环境:win2000+VS6.0+Sp6),在加入预编译头后出现了下面的编译错误提示:
c:/program files/microsoft visual studio/vc98/include/xlocnum(106) :
fatal error C1001: INTERNAL COMPILER ERROR
        (compiler file 'msc1.cpp', line 1794)
         Please choose the Technical Support command on the Visual C++
         Help menu, or open the Technical Support help file for more information
Error executing cl.exe.

 工程中的每个cpp文件编译都没有问题(除了预编译头对应的cpp文件),很是奇怪,于是在网上找了一下,找到下面一种解决办法:

VC6.0的一个编译错误的解决

在window98下使用vc6.0时,如果预编译头文件(stdafx.h)中包含了模板类的头文件,比如atl的头文件时,编译器会报错:
fatal error C1001: INTERNAL COMPILER ERROR
(compiler file 'msc1.cpp', line 1786)

造成这种问题的原因是编译器分配的内存超过了限制。
解决的办法有三种:
1.给编译器增大内存限制。在project(工程)->setting(设置)->c/c++的project option(工程选项)中,添加/Zm#nn选项,#nn是一个数字,取值最大为2000。默认为100。但是这种方法好像没有什么用处。
2.将模板类头文件从stdafx.h中移出;
3.不使用预编译头文件。project->setting->c/c++,选择所有的.cpp文件,都使用“不使用预编译头文件“的选项。缺点是编译的时候很慢。

http://www.ieasy.org/yuzuo/archives/2005_07.html

还有一个英文的:

I see that while compiling ITEL.CPP it is trying and failing to open
Debug/IODIARY.PCH. I also see that there is no IODIARY.CPP. Exactly how is
IODIARY.PCH supposed to be created?

Turn off precompiled headers for all files in the project, and rebuild. If
the build still fails, then... uh-oh..

Modify the project to use the default STDAFX.CPP/STDAFX.H method of using
PCH. Then, add an empty file STDAFX.H and an empty file STDAFX.CPP to the
project. Then, for each .CPP file, add as the first line #include
"stdafx.h" . Then compile. This should work. If it does not... uh-oh.

In order for pre-compiled headers to work properly each .CPP must have as
its first #include statement the name of the one .H (such as STDAFX.H) that
includes all the "actual" .H's (windows.h, stdio.h, etc.) that should be
included by ALL .CPPs.

That is the important part. You don't usually want EVERYsingle .H that is
included in ANY .CPP in the project to be in STDAFX.H -- you do normally
want windows.h, because it is the big one that can include a lot and is
usually included in every .CPP. Putting just windows.h in stdafx.h (and
removing it from all the .CPPs) can speed up the build tremendously.

http://www.codecomments.com/archive307-2005-3-421145.html

在MSDN中搜索到这种错误相关主题:

*http://lab.msdn.microsoft.com/productfeedback/SearchResults.aspx?text=fatal+error+C1001%3a+INTERNAL+COMPILER+ERROR&stype=1&fields=1&type=0&witId=0&pId=0&category=0&os=0&oslang=0&status=0&msstatus=0&resolution=0&chgdays=&validation=0&votes=&voterating=0&workarounds=False&attachments=False

*http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/html/c1001.asp

后来把预编译去掉后,Build终于通过了运行了,可这也太慢了,郁闷中……

还不知有没更好的解决办法??同样的工程放在VC++.net2003中却编译顺利通过,运行正常.!!!!

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: fatal error c1001: internal compiler error编译器内部错误的一种,通常是由于编译器本身的问题导致的。这种错误通常需要开发人员对编译器进行调试和修复。建议您尝试更新编译器版本或联系编译器开发者以获取更多帮助。 ### 回答2: fatal error c1001: internal compiler error是由于Visual Studio编译器在处理代码时遇到了无法处理的内部错误而导致的编译失败。这个错误可能是由编译器本身的错误引起的,或者是由代码中的错误或异常引起的。下面是一些常见的导致编译器错误的原因: 1. 代码中的语法错误或逻辑错误: 代码中的错误或异常可能导致编译器无法正确处理代码。 2. 编译器软件本身的错误编译器软件本身有时会出现错误,并且可能无法正确处理某些代码或语法结构。 3. 编译器编译环境的不匹配:编译器与某些库或操作系统不兼容时,可能会导致错误。 4. 代码文件损坏或缺失:代码文件已损坏或缺失的情况下,编译器可能无法正确处理代码。 为了解决fatal error c1001: internal compiler error,可以尝试以下方法: 1. 重新编译代码:尝试重新编译代码,以检查是否存在语法错误或逻辑错误。 2. 更新编译器:更新编译器软件,确保使用最新版本。 3. 更改编译环境:检查编译环境的设置与编译器的版本之间是否匹配,必要时更改。 4. 恢复丢失文件:恢复丢失的代码文件或替换可能损坏的代码。 如果以上方法没有解决问题,还可以使用其他编译器进行编译,或者通过将代码片段删除进行排查。如果问题仍然存在,可以尝试寻求帮助进行解决。 ### 回答3: fatal error c1001: internal compiler error一个由Visual C++编译器输出的错误信息,表明编译器编译源代码时遇到了一个内部错误,导致编译失败。这通常是由编译器自身的错误引起的,而不是源代码中的语法或逻辑错误。 这种错误通常很难调试,因为它没有提供有关发生错误的具体位置或原因的详细信息。但是,有几种可能的原因可能导致此错误: 1. 编译器已损坏或存在软件错误。在这种情况下,您可以尝试更新或重新安装Visual C++编译器,并确保使用最新版本的编译器。 2. 编译器资源不足。如果编译器无法分配足够的内存或其他系统资源来编译源代码,则可能会导致编译器错误。您可以尝试关闭其他正在运行的应用程序或增加系统RAM来解决此问题。 3. 源代码可能包含某些错误或不规范的语法,这可能会触发编译器内部错误。在这种情况下,您可以尝试检查源代码,并确保它符合正确的C++编码约定。 总之,遇到fatal error c1001: internal compiler error时,重要的是要先尝试各种解决方法,并排除可能的问题,以确保能够成功编译源代码。如果所有尝试都失败,请尝试与编译器开发人员或社区联系,以寻求更多的帮助和支持。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值