OS X/Clang 不会使用 c++11 标头

OS X/Clang won't use c++11 headers

本文关键字:c++11 标头 Clang OS      更新时间:2023-10-16

system info: OS X 10.10.5, Clang = Apple LLVM version 6.1.0 (Clang -602.0.53)(基于LLVM 3.6.0svn), cmake = 2.8.12.2

假设我有一个简单的文件main.cpp:

#include <stdio.h>
#include <vector>
#include <algorithm>
int main(void)
{
    std::vector<int> v{1, 2, 3, 4};
    int sum = std::accumulate(v.begin(), v.end(), 0);
    printf("Sum = %dn", sum);
    return 0;
 }

当我运行"clang++ -stdlib=libc++ -std=c++11 main.cpp"时,我得到错误:

main.cpp:11:20:错误:在命名空间std中没有名为" accumulate "的成员int和= std::积累(逆序函数(),v.end (), 0),

当我看,使用IDE (Qt Creator),我看到包含的头是/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault。xctoolchain/usr/include/c++/v1/算法

当我查看我的文件系统时,我看到/usr/include/c++/4.2.1存在与c++11兼容的头文件。


接下来,我使用cmake来控制更大的构建(上面只是一个示例设置)。

所以这里有一个token CMakeLists.txt文件用于上面的例子:

project(c11Test)
cmake_minimum_required(VERSION 2.8)
set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_CXX_FLAGS "-stdlib=libc++ -std=gnu++11")
add_executable(${PROJECT_NAME} main.cpp)

当我构建时,它创建了这个输出(摘录):

[100%]构建CXX对象CMakeFiles/c11Test.dir/main.cpp.o/usr/bin/c++ -stdlib=libc++ -std=gnu++11 - 0CMakeFiles/c11Test.dir/main.cpp。o -c/Users/username/c11Test/main.cpp/Users/username/c11Test/main.cpp:11:20: error: no member named在命名空间'std'中'accumulate'Int sum = std::accumulate(v.begin(), v.end(), 0);~~~~~^ 1错误生成。

(这里是整个输出):

我知道这篇文章,这似乎意味着我所需要做的就是包括这些编译器标志。但这似乎行不通。

此外,我可能需要在各种不同版本的OS X计算机上构建这个,所以我真的想知道是否有一个通用的解决方案,我在这里忽略了?

另一位朋友给出了答案:

在我的更大的程序(不在这里张贴,obv.)中,某些东西以某种隐藏的方式包含了<numeric>。当我在OSX上编译时,它不再包含在内。我原以为<algorithm>是必要的组成部分,但显然不是。这是我的错误