用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。
使用 -###
标志获取从驱动程序传递到编译器的实际选项,以便可以尝试调整它们。
- 叮当不知道PTRDIFF_MAX?
- Windows/Cygwin - 不能使用 pybind11 - 犯错误
- MacOS通过在莫哈韦"wchar.h"下破碎的自制啤酒发出叮当声
- 在cygwin中运行c++脚本时发生错误
- 在cygwin中测试新的boost安装时出现cpp错误
- 如何以叮当格式设置评论的行长?
- 为什么 gcc 会产生这种奇怪的组件与叮当声?
- 如何配置Visual Studio Code以使用cygwin,cmake和gcc进行调试
- 编译 CUDA 与数学函数的叮当
- 叮当格式化程序多行格式配置错误
- 如何在窗户上使用和配置叮当声?
- 叮当声:折叠表情和"expression result unused"警告
- 构建 LLVM 后未找到叮当
- 避免指针运算,修复叮当整齐错误
- 初始化thread_local叮当中的错误
- 如何以叮当格式强制东常量?
- 静态 std::stringstream 的叮当整警告
- 如何设置叮当格式的注释编译指示,以免触及多行doxygen注释?
- Cygwin下的gcc 9.3.0预处理器:cmdline -Dname,但名称似乎未定义
- 用C++11在Cygwin上叮当