gpt4 book ai didi

c++ - cl.exe 和 ml.exe 的问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:49 27 4
gpt4 key购买 nike

我用cl命令编译了一个cpp文件:

cl test.cpp  //the generated  test.exe can work well

然后我用了另一种方式:

cl /Fa /c test.cpp   //generate a test.asm assembly file
ml test.asm // there failed!!!

为什么?如何解决?

源代码:

//:test.cpp 

#include<iostream>
using namespace std;
int main()
{
cout<<"hello\n";
}

错误信息:

Assembling: test.asm test.asm(1669) : fatal error A1010: unmatched block nesting

: ??$?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");
}

然后我编译代码

cl /Fa /c test.cpp
ml test.asm //ok!

可能是C和C++的区别。这让我困惑了几天。 :(

如何解决?请帮助我。

最佳答案

编译器在生成异常处理代码时生成无效的汇编列表。 Microsoft Connect 上有一个漏洞:http://connect.microsoft.com/VisualStudio/feedback/details/556051/cl-facs-generates-bad-masm-for-c-exception-handlers

在对这个错误的回应中,有一个三心二意的“我们会考虑修复这个问题”以及“C/C++ 编译器生成的列表文件仅供引用”的免责声明。

看来您可以针对这个特定问题使用“脚本化”修复:

  • 剪切 text$x ENDS 语句之后的 ENDP 语句,
  • 将其粘贴到前一个 _TEXT ENDS 语句之前

至少这看起来是由您的简单程序生成的 asm 文件中的模式 - 我不知道该模式是否普遍适用。

不幸的是,应用此修复程序后,使用 fs 覆盖的指令和几个 undefined symbol 会出现几个新问题。谁知道您在使用更复杂的程序尝试此操作后还会遇到什么?

关于c++ - cl.exe 和 ml.exe 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7488056/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com