【问题标题】:Executable generated with clang++ goes crazy用 clang++ 生成的可执行文件发疯了
【发布时间】:2011-11-18 10:30:28
【问题描述】:
#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

【问题讨论】:

  • 您忘记将-Wall 传递给clang++

标签: c++ compiler-construction llvm clang


【解决方案1】:

通过添加“-emit-llvm -S”,您不会生成机器码,而是生成 LLVM 字节码。要运行它,您需要使用lli

ntvdm.exe 是运行实模式 DOS 程序的虚拟机,这可能意味着 windows 将 LLVM 字节码中的可执行文件解释为 16 位 DOS 程序并尝试将其作为一个运行。

【讨论】:

    猜你喜欢
    • 2011-08-22
    • 2013-02-18
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 2014-06-08
    相关资源
    最近更新 更多