2011-09-16 198 views
5
#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 ++生成的可執行文件變得瘋狂

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 
+0

看起來非常好。 –

+0

你忘了將'-Wall'傳遞給'clang ++' –

回答

9

通過添加 '-emit-LLVM -S' 你是不是生成機器碼,但LLVM字節碼。要運行它,你需要使用lli

由於ntvdm.exe是用於運行實模式DOS程序的虛擬機,它可能意味着windows將LLVM字節碼中的可執行文件解釋爲16位DOS程序並嘗試將其作爲一個運行。

+0

非常好我明白了錯誤..謝謝.... –