如何修复与 MacOSX 上的全局命名空间错误中没有成员相关的缺失时间?

Posted

技术标签:

【中文标题】如何修复与 MacOSX 上的全局命名空间错误中没有成员相关的缺失时间?【英文标题】:How to fix missing time related no member in global namespace errors on MacOSX? 【发布时间】:2014-11-28 12:47:08 【问题描述】:

我正在尝试在 Maverick 10.9 的命令行上编译一个项目。该项目在 Linux 上完美编译。显然,MacOSX 上的 ctime 似乎存在问题。错误是

$ make
Compiling src//core/AbstractARAClient.cpp
In file included from src//core/AbstractARAClient.cpp:5:
In file included from include/AbstractARAClient.h:8:
In file included from include/ARAMacros.h:14:
In file included from include/Address.h:9:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/sstream:174:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/ostream:131:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/ios:216:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__locale:18:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/mutex:176:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__mutex_base:15:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/chrono:279:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/ctime:56:9: error: no member named
      'clock_t' in the global namespace
using ::clock_t;
      ~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/ctime:58:9: error: no member named
      'time_t' in the global namespace; did you mean 'size_t'?
using ::time_t;
      ~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/6.0/include/stddef.h:42:23: note: 
      'size_t' declared here
typedef __SIZE_TYPE__ size_t;

In file included from src//core/AbstractARAClient.cpp:5:
In file included from include/AbstractARAClient.h:8:
In file included from include/ARAMacros.h:14:
In file included from include/Address.h:9:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/sstream:174:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/ostream:131:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/ios:216:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__locale:18:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/mutex:176:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__mutex_base:15:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/chrono:279:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/ctime:60:9: error: no member named
      'clock' in the global namespace
using ::clock;
      ~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/ctime:61:9: error: no member named
      'difftime' in the global namespace
using ::difftime;
      ~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/ctime:62:9: error: no member named
      'mktime' in the global namespace
using ::mktime;
      ~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/ctime:63:9: error: no member named
      'time' in the global namespace
using ::time;

我在网上搜索过,如果项目中有名为“time.h”的标题(就像这个项目中的情况一样),似乎存在问题。 ctime 的实际实现不完整似乎通常也存在问题(但通常人们指的是通过 xcode 安装命令行实用程序)。

我想知道一般问题是什么,最后如何在 mac 上实际编译代码。相反,对于存储库中的代码,我在 Makefile 第 53 行添加了一个 stdlib 选项

CFLAGS_DEBUG = -g -Wall -stdlib=libc++

C++11 选项已在 Makefile 的前一行中设置。

TIA

【问题讨论】:

The C++11 option is already set in a previous of the Makefile.... 实际命令是什么? 没关系了。这不是 C++11 的问题,而是项目中的标题“Time.h”导致与 /usr/include/time.h 冲突。 【参考方案1】:

答案或多或少是显而易见的。该项目包含一个标题Time.h(和相应的类Time)。不幸的是,MacOSX 文件系统不区分大小写,这意味着这与/usr/include 中现有的time.h 冲突。

您可以在 Time.h 之前包含系统 time.h(意思是 #include <ctime>)或简单地将文件重命名为其他名称(例如 MyTime.h)。

【讨论】:

好吧,我已经花了一些时间来解决这个问题。 omg 一样,我不敢相信今天还在使用 cpp【参考方案2】:

检查您的系统上是否存在/usr/local/include/time.h,如果存在则将其删除。

【讨论】:

它对我有用!你能解释一下这是如何工作的吗? @傻瓜 在我的例子中,是 Homebrew 在/usr/local/include 中安装了许多头文件,这些头文件覆盖了系统头文件。 这么多年过去了,当我安装某些 NPM 包/使用 pyenv 安装不同版本的 Python 时,这就是我的答案。【参考方案3】:

有一种不同的方法可以解决这个问题,恕我直言,哪种方法更好。我写这个是为了下次我遇到这个错误并且忘记解决方案(几年后?)时可以轻松找到答案

进入 Xcode 并从 Build 阶段删除“Headers”部分中包含的项目文件。

这将防止编译器的不当操作,包括您的空间(只能(或至少最后排序)通过“Time.h”访问)

这实质上是告诉 Xcode “不,我不想像搜索库一样搜索我自己的头文件,因为它是我自己的项目”

它可能还有其他次要影响,但至少对于我的使用而言,这比重命名我的“Time.h”要好

【讨论】:

以上是关于如何修复与 MacOSX 上的全局命名空间错误中没有成员相关的缺失时间?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 google colab 上的 cuda 运行时错误?

如何修复错误“命名管道提供程序,错误 40 - 无法打开与“SQL Server”的连接?

text tinyrefl解析器错误,找不到全局命名空间中的命名空间

针对供应商的 PhpStorm PSR-4 命名空间修复建议

XCode、命名空间、C++ 和代码可移植性

在全局范围内声明命名空间错误