Исполняемый файл сгенерированный clang ++ сходит с ума - PullRequest
5 голосов
/ 16 сентября 2011
#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

1 Ответ

9 голосов
/ 16 сентября 2011

Добавляя '-emit-llvm -S', вы генерируете не машинный код, а байт-код LLVM.Для этого вам нужно использовать lli .

Поскольку ntvdm.exe - это виртуальная машина для запуска программ DOS реального режима, это может означать, что windows интерпретирует исполняемый файл в байт-коде LLVM как 16-битная программа DOS и пытается запустить ее как единое целое.

...