无法运行g ++生成的汇编代码

时间:2014-06-26 11:45:42

标签: assembly

我使用了一个非常简单的C ++代码:

#include <iostream>
using namespace std;

int main()
{
    int a = 9;
    int b = 4;

    cout << (a+b) << endl;

return 0;
}

然后在终端中,使用g ++ -S标志创建汇编代码:

g++ a.cpp -S

这会生成一个名为a.s的文件。我尝试使用nasm运行此汇编代码:

nasm -f elf a.s

但这导致了大量的错误。 (主要是这一个 - &gt;错误:解析器:指令预期 )

我也试过

-masm=intel 

选项。

那么,为什么那段汇编代码(由g ++通过正在运行的C ++代码生成)不起作用?

1 个答案:

答案 0 :(得分:2)

实际上GNU汇编程序as使用这种格式。

as a.s

as的输出是一个目标文件。要使其可执行,您需要将其与ld链接,但您还需要链接其依赖的任何对象,如果源是从gcc生成的,则至少还包括libc,以及可能是其他一些目标文件,但是,正如James的评论所包含的那样,它可能更容易做到

g++ a.s -o prog