a problem with cl.exe and ml.exe

时光毁灭记忆、已成空白 提交于 2019-11-27 07:03:52

问题


I used cl command to compile a cpp file:

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

then I used another way:

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

why? How to solve it?

source code:

//:test.cpp 

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

wrong information:

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


today I write another code in c

//test.cpp
#include<stdio.h>
void main()
{
  printf("hello");
}

then I compile the code

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

It may be the difference in C and C++. This confuses me a few days. :(

how to solve it? please help me.


回答1:


The compiler produces an invalid assembly listing when exception handling code is produced. There's a bug open on Microsoft Connect: http://connect.microsoft.com/VisualStudio/feedback/details/556051/cl-facs-generates-bad-masm-for-c-exception-handlers

In a response to the bug, there's a half-hearted "we will consider fixing this" along with a disclaimer that "listing files generated by the C/C++ compiler are for informational purposes".

It looks like you might be able to have a "scriptable" fix for this particular problem:

  • cut the ENDP statement that follows a text$x ENDS statement,
  • paste it just before the previous _TEXT ENDS statement

At least that looks to be the pattern in the asm file generated by your simple program - I don't know if that pattern would hold generally.

Unfortunately, after applying this fix, several new problems crop up with instructions using fs overrides and a couple undefined symbols. Who knows what else you'd run into once you tried this with a more complex program?



来源:https://stackoverflow.com/questions/7488056/a-problem-with-cl-exe-and-ml-exe

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!