2012-09-28 84 views
2

有一個教程 - http://llvm.org/docs/GettingStartedVS.html純C做的例子我可以編譯並鏈接它。沒問題,真的。但我需要C++,而不是純粹的C,而這裏的困難開始。如何使用clang ++在LLVM中編譯C++程序?

對於鐺++我用字符串如

"C:\..> clang++ -c hello.cpp -emit-llvm -o hello.bc" 

則:

"C:\..> llc -filetype=obj hello.bc" 

"C:\..> link hello.obj -defaultlib:libcmt -out:hello.exe" 

那裏我得到的14個錯誤LNK2001: unresolved external symbol

所以,我需要小號ome提示。我做錯了什麼?

//----------------- 

HELLO.CPP:

#include <iostream> 

int main() 

{ 

    std::cout << "TEST\n" << std::endl; 

    return 0; 

} 

//----------------- 

操作系統:Windows7的。

UPD:主要問題:如何從.bc獲取.exe? (LLVM,Windows7的)

+0

我的linux機器上我可以運行'clang ++ -c hello.cpp -o hello'。這不適用於Windows? – none

+0

有一種方法來得到.exe,但我需要得到.bc(字節碼LLVM),然後從.bc得到.exe ... – kpdev

+1

您不會發布您正在獲取的鏈接錯誤,但我想它是C++運行時,這篇文章表明你需要mcsvcr80.dll來支持C++,所以我想你需要將它添加到鏈接行中... http://msdn.microsoft.com/en-us/library/abx4dbyh (v = vs80).aspx – combinatorial

回答

1

你可以用我GCCClang包:

下載並提取到同一目錄中。 Clang將使用GCC 4.6.3的libstdC++和MinGW-w64的CRT。就像你會gcc一樣。

由於ABI問題,Clang/LLVM目前無法使用MSVC的C++庫。 GCC的libstdC++工作得很好,雖然它在令人驚訝的地方出現漏洞(如std::to_string,<regex><thread>)。

Clang的Windows支持是可以的,但還不完整。不幸的是,你不能舉例說dllexport整個C++類。而Win64代碼生成也不夠好,無法正常運行C++安裝(即使與GCC結合使用,例如32位)。

+0

看起來像是有效的。非常感謝!但我有新的錯誤: C:\ Windows \ System32> C:\ Gms \ mingw32-dw2 \ bin \ clang ++。exe -c C:\ Alien \ hellocpp.cpp -emit-llvm -o C:\ Alien \ hellocpp.bc C:\ Windows \ System32> C:\ Gms \ mingw32-dw2 \ bin \ llvm-dis.exe kpdev

+0

我不知道。關鍵是你不必再通過LLVM bitcode,但是使用Clang作爲一個普通的編譯器,並且直接編譯爲對象代碼和可執行文件。 – rubenvb

+0

不必再經歷LLVM bitcode ....太糟糕了...我的博士研究正在開發用於學術編程語言的編譯器(讓它命名爲APL)。現在我們有一個從APL到C++的翻譯器。但我的任務是寫一個翻譯從APL到LLVM咬碼(至少,這將是很好)。並且,在可能的情況下,使用APL-> C++翻譯器的預先編寫的部分。 – kpdev

相關問題