叮当和<iostream>窗户上



根据http://clang.llvm.org/get_started.html我用Visual Studio 2010在Windows上做了ALL_BUILD,并将构建的东西添加到我的系统路径$ path =…ClangSourcBuildPath…buildbinRelease

我现在可以在控制台上编译以下文件:

$> clang file_c

//file_c.c
#include <stdio.h>
int main() 
{
  printf("hello worldn");
  return 0;
}

但是如果我对下面的文件($> clang file_cpp.cpp)做同样的操作:

//file_cpp.cpp
#include <iostream>
int main()
{
    std::cout << "Hello World!";
    return 0;
}

得到以下错误:

从file_cpp.cpp:1:

In file included from C:Program Files (x86)Microsoft Visual StudioVC98includeiostream:9:   
In file included from C:Program Files (x86)Microsoft Visual StudioVC98includeistream:9:  
In file included from C:Program Files (x86)Microsoft Visual StudioVC98includeostream:9:  
In file included from C:Program Files (x86)Microsoft Visual StudioVC98includeios:9:  
In file included from C:Program Files (x86)Microsoft Visual StudioVC98includestreambuf:9:  
In file included from C:Program Files (x86)Microsoft Visual StudioVC98includexlocnum:13:  
In file included from C:Program Files (x86)Microsoft Visual StudioVC98includexiosbase:9:  
In file included from C:Program Files (x86)Microsoft Visual StudioVC98includexlocale:11:  
In file included from C:Program Files (x86)Microsoft Visual StudioVC98includestdexcept:10:  
In file included from C:Program Files (x86)Microsoft Visual StudioVC98includexstring:9:  
In file included from C:Program Files (x86)Microsoft Visual StudioVC98includexmemory:15:  
C:Program Files (x86)Microsoft Visual StudioVC98includeutility:81:10:   
error: missing 'typename' prior to dependent type name '_It::iterator_category' typedef _It::iterator_category iterator_category;
C:Program Files (x86)Microsoft Visual StudioVC98includeutility:82:10:  
error: missing 'typename' prior to dependent type name '_It::value_type' typedef _It::value_type value_type;
C:Program Files (x86)Microsoft Visual StudioVC98includeutility:83:10:  
error: missing 'typename' prior to dependent type name '_It::distance_type' typedef _It::distance_type distance_type;
C:Program Files (x86)Microsoft Visual StudioVC98includeutility:224:32:  
error: template parameter redefines default argument  
 template < class _E, class _Tr = char_traits< _E > >  
...

我也试过:

$> clang++ file_cpp.cpp
$> clang -x c++ file_cpp.cpp

但是我仍然得到相同的错误。

谁能告诉我怎么了?

有一些特定的标志(我认为是-fms-extensions,不太确定确切的选项)需要得到clang来解析vc++头文件。

您将遇到的下一个问题是无法链接生成的可执行文件。这是由于clang使用了与MSVC不同的名称混淆,并且会导致未定义的引用。

如果你想在Windows上使用Clang(目前可以使用MinGW-w64),你可以使用我的预构建包,你需要

  1. 3.2叮当声

  2. GCC 4.6

解压到同一目录。在这种情况下,GCC仅用于调用链接器。Clang可以用来编译任何东西。

目前还没有办法在Visual Studio头文件库中使用clang。C应该可以工作,但我还没有测试过,可能有其他ABI问题阻止它工作。

最新更新