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

     2023-03-25     79

关键词:

【中文标题】OS X/Clang 不会使用 c++11 头文件【英文标题】:OS X/Clang won't use c++11 headers 【发布时间】:2015-12-13 09:55:10 【问题描述】:

系统信息: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> v1, 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:错误:命名空间“std”中没有名为“accumulate”的成员 int sum = std::accumulate(v.begin(), v.end(), 0);

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

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


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

所以这是上面示例的令牌 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 -o CMakeFiles/c11Test.dir/main.cpp.o -c /Users/username/c11Test/main.cpp /Users/username/c11Test/main.cpp:11:20:错误:没有成员命名 命名空间“std”中的“累积” int sum = std::accumulate(v.begin(), v.end(), 0); ~~~~~^ 产生了 1 个错误。

(whole output here):

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

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

【问题讨论】:

【参考方案1】:

另一位朋友提供了答案:

在我更大的程序中(未在此处发布,obv。)某些东西以某种隐藏的方式包含了&lt;numeric&gt;。当我在 OSX 上编译时,它不再包含在内。我曾认为&lt;algorithm&gt; 是必要的组件,但显然不是。所以只是我的错误。

【讨论】:

如果您愿意尝试使用实验性功能,您可以打开-fmodules,当您尝试使用设施但未包含正确的标题时,它将直接告诉您.例如这里它会告诉你你正在使用accumulate,但未能#include数字标题。 我提到“futzing”实验性功能的原因是我记得曾经有一个 libc++ 头文件需要进行一次更改才能纠正将它们模块化的错误。我想我有一个脚本或某处应用了适当的补丁。我不知道 Apple 是否已经更新了 Xcode 附带的版本。

如何在 Mac OS X 上的 C 程序中包含 hdf5 头文件?

...间】:2012-06-0117:37:42【问题描述】:我正在尝试学习如何使用C进行编程,并且我希望能够将数据从.hdf文件导入到我的C程序中。我使用的是2009年中期配备MacOSXlion的MacBookPro。我认为我遇到了问题,因为我不知道将所有与hdd关联的... 查看详情

c语言之在头文件中定义全局变量(代码片段)

...明,但是,如果我们定义的全局变量需要被很多的C文件使用的话,那么将全局变量定义在头文件里面会方便很多,那到底是如何实现的?os_var.c文件内容1#defineOS_GLOBALS2#include“os.h”os.h文件内容1#ifdefOS_GLOBALS2#defineOS_EXT3#else4... 查看详情

Ubuntu和OS-X之间的头文件兼容性

...些简单的代码时,我遇到了一些错误。我在两个平台上都使用gcc/g++。原型设计似乎没有正确传输:当我对mysin.cpp文件进行原 查看详情

c头文件(代码片段)

...头文件。引用头文件相当于复制头文件的内容,但是我们不会直接在源文件中复制头文件的内容,因为这么做很容易出错,特别在程序是由多个源文件 查看详情

23.头文件

...文件。 引用头文件相当于复制头文件的内容,但是我们不会直接在源文件中复制头文件的内容, 因为这么做很容易出错,特别 查看详情

使用 Linux C 代码和头文件编译 Windows DLL

】使用LinuxC代码和头文件编译WindowsDLL【英文标题】:UsingLinuxCcodeandheaderfilestocompileaWindowsDLL【发布时间】:2012-11-0316:43:27【问题描述】:我想知道通常是否可以使用VisualC++2010从C代码和我在Linux发行版中找到的头文件创建C++DLL。理... 查看详情

在 Mac OS 上使用 OpenMP 和 C++11

】在MacOS上使用OpenMP和C++11【英文标题】:UsingOpenMPwithC++11onMacOS【发布时间】:2017-02-2003:32:51【问题描述】:我正在尝试在我的C++11代码中使用一些OpenMP多线程功能,例如:#pragmaompparallelfor当我尝试编译时:clang++-std=c++11-stdlib=libc+... 查看详情

c中conio.h是啥头文件?c++中能用吗

...UNIX和Linux平台的c编译器通常不包含此头文件。如果需要使用此头文件,可以从互联网下载。 查看详情

使用 C 播放音频文件

】使用C播放音频文件【英文标题】:PlayingaudiofileusingC【发布时间】:2009-11-2006:07:22【问题描述】:是否需要包含任何头文件来使用C语言播放音频文件。【问题讨论】:适用于什么平台?您使用的是什么操作系统?您需要对播放... 查看详情

c语言基础:头文件(代码片段)

...件。引用头文件相当于复制头文件的内容,但是我们不会直接在源文件中复制头文件的内容,因为这么做很容易出错,特别在程序是由多个源文件组成的时候。建议把所有的常量、宏、系统全局变量和函数原型写在头... 查看详情

linuxfromscratch(lfs11.0)编译交叉工具链-linux-5.13.12api头文件(代码片段)

LinuxAPI头文件(在linux-5.13.12.tar.xz中)导出内核API供Glibc使用。安装LinuxAPI头文件Linux内核需要导出一个应用程序编程接口(API)供系统的C运行库(例如LFS中的Glibc)使用。这通过净化内核源码包中提供的若干C头文件完成。确保环境变量已... 查看详情

*.c 在依赖 x.h 更改时不会反抗,使用自动生成的 *.d 文件

】*.c在依赖x.h更改时不会反抗,使用自动生成的*.d文件【英文标题】:*.cnotrebultwhendependencyx.hchanged,usingauto-generated*.dfile【发布时间】:2019-01-0315:55:30【问题描述】:我在编译期间处理依赖文件时遇到了一个问题。我只是给你我在... 查看详情

预编译头文件 - 选择文件

...等,而不是重新编译所有内容)或我的代码中的文件,我不会改变很多,或者我的代码中的文件无处不在或几乎无处不在。如果我有例如150个要编译的文件,其中25个包含一些 查看详情

模块(代码片段)

...根据平台变化  path模块仅仅是对路径(字符串)进行操作不会直接操作文件importos#print(os.getcwd())#当前工作目录#os.chdir()#修改当前工作目录#print(os.curdir)#.代表当前#print(os.pardir)#代表上一级##创建多级目录不同平台路径分隔符不同#o... 查看详情

c语言编程,sinx?

...不像COBOL、Fortran和PL/I等编程语言,在C语言的工作任务里不会包含嵌入的关键字,所以几乎所有的C语言程序都是由标准函数库的函数来创建的。1995年,NormativeAddendum1(NA1)批准了三个头文件(iso646.h,wchar.h,andwctype.h)增加到C标准函数... 查看详情

ppq的面试题总结(代码片段)

...体进程的一个执行路径CPU调度和分派的基本单位线程本身不会独立存在当前线程CPU时间片用完后,会让出CPU等下次轮到自己时候在执行系统不会为线程分配内存,线程组之间只能共享进程的资源线程只拥有在运行中必不可少的资... 查看详情

xcode 4.4.1 c++11 头文件仍归档在 tr1 下吗?

】xcode4.4.1c++11头文件仍归档在tr1下吗?【英文标题】:xcode4.4.1c++11headersstillfiledundertr1?【发布时间】:2012-09-1305:08:45【问题描述】:我创建了一个标准c++库项目,并尝试包含&lt;tuple&gt;,但它似乎没有作为***标题包含在内,... 查看详情

ucosii笔记1:移植

...;    与cpu无关的代码os_config.h操作系统配置文件os_cpu.h处理器相关头文件ucos_ii.h操作系统头文件os_cpu.c处理器相关c文件os 查看详情