我使用了一个非常简单的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 ++代码生成)不起作用?
答案 0 :(得分:2)
实际上GNU汇编程序as
使用这种格式。
as a.s
as
的输出是一个目标文件。要使其可执行,您需要将其与ld
链接,但您还需要链接其依赖的任何对象,如果源是从gcc
生成的,则至少还包括libc,以及可能是其他一些目标文件,但是,正如James的评论所包含的那样,它可能更容易做到
g++ a.s -o prog