OS X/Clang 不会使用 c++11 标头
OS X/Clang won't use c++11 headers
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>
是必要的组成部分,但显然不是。这是我的错误
- g++ 说函数不存在,即使包含正确的标头
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 在CMake中使用find_package时,是否会显式包含标头
- 错误"Could not find Boost"(缺少:上下文标头)
- 如何在标头中声明(或定义)函数的问题
- 在 C++11 中,signal.h 标头没有 kill 函数
- 为什么 Xcode 11 beta 不能使用 C++17 的<filesystem>标头?
- 使用 C++11 选项编译 C++98 代码时由于 Boost 标头而导致的不明确重载
- 由于 C++11 标准导致的标头中的 QtGStreamer 编译时错误?
- 如何为 C++0x/11 和非 C++0x/11 制作标头
- 找不到XCode 4.5和C 11个标头
- xcode 4.4.1 c++11标头仍在tr1下存档
- 链接器 C++11 仅标头错误
- 包括C++ 11 个带有 Clang / LLVM 的标头
- C++11 使用标头 '' 实现自旋锁<atomic>
- Clang:找不到C++11标头
- C++11 <codecvt> 标头在最新的 GCC 中可用吗?
- OS X/Clang 不会使用 c++11 标头
- 使用 c++11 的<random>标头,获取 0 到 n 之间的整数的正确方法是什么?
- 在Solaris 11上使用Sun提供的GCC的_blsr_u64的标头