c++ - OS X/Clang 不会使用 c++11 头文件

标签 c++ macos c++11 cmake clang

系统信息:OS X 10.10.5,Clang = Apple LLVM 版本 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 = %d\n", sum);
    return 0;
 }

当我运行“clang++ -stdlib=libc++ -std=c++11 main.cpp”时出现错误:

main.cpp:11:20: error: no member named 'accumulate' in namespace 'std' int sum = std::accumulate(v.begin(), v.end(), 0);

当我使用 IDE (Qt Creator) 查看时,我看到包含的 header 是/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/algorithm

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


接下来,我使用 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%] Building CXX object CMakeFiles/c11Test.dir/main.cpp.o /usr/bin/c++ -stdlib=libc++ -std=gnu++11 -o CMakeFiles/c11Test.dir/main.cpp.o -c /Users/username/c11Test/main.cpp /Users/username/c11Test/main.cpp:11:20: error: no member named 'accumulate' in namespace 'std' int sum = std::accumulate(v.begin(), v.end(), 0); ~~~~~^ 1 error generated.

(whole output here):

我知道 this post ,这似乎意味着我需要做的只是包含这些编译器标志。但这似乎不起作用。

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

最佳答案

另一位 friend 提供了答案:

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

关于c++ - OS X/Clang 不会使用 c++11 头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32614922/

相关文章:

c++ - 两个类可以使用 C++ 互相看到吗?

c++ - 将 std::less 与 nullptr 一起使用

c++ - 获取整数位集中前导 1 位置的最快方法?

c++ - 传递给函数的 Default_random_engine 提供可重复的结果

c++ - 如何正确分割字符串中的数字?

c++ - llvm 基本 block 前辈 llvm pred_iterator 超出范围

objective-c - Mac OS X 上的图像处理入门

windows - 从父 Windows 操作系统调用在 mac vmware 上运行的应用程序

swift - MIME 类型的所有应用程序 URL

c++ - 在 C++ 中定义自己的异常类