Sim*_*mon 5 c++ compiler-errors cl.exe visual-studio
我使用cl命令编译cpp文件:
cl test.cpp //the generated test.exe can work well
Run Code Online (Sandbox Code Playgroud)
然后我用另一种方式:
cl /Fa /c test.cpp //generate a test.asm assembly file
ml test.asm // there failed!!!
Run Code Online (Sandbox Code Playgroud)
为什么?怎么解决?
源代码:
//:test.cpp
#include<iostream>
using namespace std;
int main()
{
cout<<"hello\n";
}
Run Code Online (Sandbox Code Playgroud)
错误的信息:
组装:test.asm test.asm(1669):致命错误A1010:无法匹配的块嵌套
:?? $?6U?$ char_trait s @ D @ std @@@ std @@ YAAAV?$ basic_ostream @ DU?$ char_traits @ D @ std @@@ 0 @ AAV10 @ PBD @ Z
今天我在c中写了另一段代码
//test.cpp
#include<stdio.h>
void main()
{
printf("hello");
}
Run Code Online (Sandbox Code Playgroud)
然后我编译代码
cl /Fa /c test.cpp
ml test.asm //ok!
Run Code Online (Sandbox Code Playgroud)
它可能是C和C++的不同之处.这让我困惑了几天.:(
怎么解决?请帮我.
生成异常处理代码时,编译器会生成无效的程序集列表.Microsoft Connect上打开了一个错误:http://connect.microsoft.com/VisualStudio/feedback/details/556051/cl-facs-generates-bad-masm-for-c-exception-handlers
在对这个bug的回应中,有一个半心半意的"我们将考虑修复此问题"以及"由C/C++编译器生成的列表文件仅供参考"的免责声明.
看起来您可以对此特定问题进行"脚本化"修复:
ENDP声明后的text$x ENDS陈述,_TEXT ENDS语句之前粘贴它至少看起来是你的简单程序生成的asm文件中的模式 - 我不知道这种模式是否会普遍存在.
不幸的是,在应用此修复程序后,使用fs覆盖和几个未定义符号的指令会出现几个新问题.谁知道一旦你用更复杂的程序尝试这个,你会遇到什么?
| 归档时间: |
|
| 查看次数: |
1736 次 |
| 最近记录: |