Apple Clang;使用C ++ 11和libstdc ++

时间:2016-02-24 10:12:38

标签: c++ c++11 clang llvm libstdc++

在使用initializer_list-stdlib=libstdc++

时编译带有-std=c++11参数的空函数的简单Hello文件时出现问题

如果我只使用-std=c++11(这意味着使用libc ++进行编译)

然后文件编译并打印Hello!

如果我发表评论function_test并同时使用-std=c++11-stdlib=libstdc++

然后文件编译并打印Hello!

如果我保留功能function_test,我同时使用-std=c++11-stdlib=libstdc++

然后我收到以下错误:

$ g++ -stdlib=libstdc++  -std=c++11   -o test test.cpp
test.cpp:1:10: fatal error: 'initializer_list' file not found
#include <initializer_list>
          ^
1 error generated.

这是我的档案

#include <initializer_list>
#include <iostream>
using namespace std;

void function_test(initializer_list<int> something){}

int main(int argc, char * argv[])
{
   cout << "Hello!" << endl;
   function_test({0});
   return 0;
}

这是我的苹果铿锵版

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr
--with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 7.0.2 (clang-700.1.81)
Target: x86_64-apple-darwin15.3.0
Thread model: posix

2 个答案:

答案 0 :(得分:6)

--with-gxx-include-dir=/usr/include/c++/4.2.1
                                       ^^^^^^^

注意“4.2”。对于C ++ 11,你的libstdc ++是方式。将其升级到某些5.x版本以获得完整的C ++ 11支持。

答案 1 :(得分:1)

我发现使用apple-llvm(clang)无法升级到更新版本的libstdc ++。因此,使用C ++ 11和libstdc ++的某些功能是不可能的。原因是这个:

  

主线libstdc ++已切换到GPL3,这是一个许可证   libc ++的开发人员无法使用。 libstdc ++ 4.2(最后一个GPL2版本)   可以独立扩展以支持C ++ 11,但这将是一个   代码库的分支(对于项目而言,这通常被视为更糟糕   开始一个新的独立的)。 libstdc ++的另一个问题是   它与G ++开发紧密集成,趋于束缚   与G ++的匹配版本非常接近。

源: http://libcxx.llvm.org/docs/

感谢所有帮助我找到答案的答案/评论。