2012-09-28 86 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

相关问题