#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
using namespace std;
class Book{
public:
int a;
int b;
};
int main()
{
Book b1;
b1.a = 10;
b1.b = 20;
cout<< b1.a << " " <<b1.b;
}
当我们用
编译上面的代码时clang++ test.cc -o a.exe
并运行 a.exe 效果很好。但是当我们用
编译相同的程序时clang++ test.cc -emit-llvm -S -o a.exe
现在,当我们运行它时,程序会通过启动
ntvdm.exe
(可以在进程资源管理器中看到)而变得疯狂,并且命令提示符开始表现得很奇怪。
软件堆栈:
clang version 2.9 (tags/RELEASE_29/final)
Target: i386-pc-mingw32
Thread model: posix
通过添加“-emit-llvm -S”,您不会生成机器代码,而是生成 LLVM 字节码。要运行它,您需要使用 lli。
由于
ntvdm.exe
是运行实模式 DOS 程序的虚拟机,这可能意味着 Windows 将 LLVM 字节码中的可执行文件解释为 16 位 DOS 程序,并尝试将其作为一个运行。