#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程序,并尝试将其作为一个程序运行。

09-04 16:15
查看更多