繁体   English   中英

使用C ++ 11克隆Cygwin

[英]Clang on Cygwin with C++11

我在Cygwin上安装了Clang,我尝试编译这段代码:

#include <iostream>
int main() {
  std::cout << "hello world!" << std::endl;
  return 0;
}

如果我做clang++ file.cpp那很好。 如果我做clang++ file.cpp -std=c++11 我从标准标题中得到错误,如下所示:

In file included from file.cpp:1:
In file included from /usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/iostream:39:
In file included from /usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/ostream:39:
In file included from /usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/ios:39:
In file included from /usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/exception:150:
/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/exception_ptr.h:132:13: error:
      unknown type name 'type_info'
      const type_info*

Cygwin Clang是不是开启了C ++ 11,或者我可以做些什么来解决这个问题?

它看起来像标准库中的错误。 exception_ptr.h仅包含在C ++ 11模式中,这就是为什么你没有看到它。 正如错误所说,问题是没有声明std :: type_info。 似乎GCC神奇地向前在std命名空间中声明了某些名称,这就是为什么它不受影响! 你可以用一个简单的程序自己证明:

namespace std {  

    class A
    {
    public:
         type_info* B();
    };
}

这与GCC 4.5.3一起编译,但无论-std设置如何,Clang都会出错。

该问题已在最新版本的GCC中修复,因此手动更新可能是您最好的选择。 使用--enable-languages = c,c ++配置的4.7.2版本在Cygwin下编译没有问题。

使用C ++ 11将Clang包用于Cygwin是可能且相对容易的。

例如,您所描述的错误是通过添加来修复的

#ifdef __clang__
    class type_info;
#endif

exception_ptr.h 另一个需要修复的错误是向std::pair添加一个拷贝构造函数。

不幸的是,这很不幸,希望Cyginw gcc软件包将更新为更新版本的C ++标准库。

我认为默认情况下,Windows上的clang将使用ms兼容模式和ms扩展。 Windows上的这些和其他默认值可能不适合Cygwin。

使用-###标志来获取从驱动程序传递给编译器的实际选项,以便您可以尝试调整它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM