Как исправить отсутствующее время, связанное с отсутствием члена в глобальных ошибках пространства имен в MacOSX?

Я пытаюсь скомпилировать проект в командной строке на Maverick 10.9. Проект отлично компилируется в Linux. Судя по всему, проблема с ctime в MacOSX. Ошибки

$ 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.

ТИА


person user1729210    schedule 03.10.2014    source источник
comment
The C++11 option is already set in a previous of the Makefile.... какова настоящая команда?   -  person Grady Player    schedule 18.02.2015
comment
Это больше не имеет значения. Это была проблема не C++11, а заголовка «Time.h» в проекте, что привело к конфликту с /usr/include/time.h.   -  person user1729210    schedule 18.02.2015


Ответы (3)


Ответ более-менее очевиден. Проект содержит заголовок Time.h (и соответствующий класс Time). К сожалению, файловая система MacOSX нечувствительна к регистру, что означает конфликт с существующим time.h в /usr/include.

Вы можете либо включить системное время.h (что означает #include <ctime>) перед Time.h, либо просто переименовать свой файл во что-то другое (например, MyTime.h).

person user1729210    schedule 18.02.2015
comment
Ну, я потратил некоторое время на эту проблему. - person user1729210; 19.02.2015

Проверьте, существует ли /usr/local/include/time.h в вашей системе, удалите его, если он существует.

person fool    schedule 16.12.2018
comment
Это сработало для меня! Можете ли вы объяснить, как это работает? @дурак - person bombs; 22.12.2018
comment
В моем случае Homebrew установил множество заголовков в /usr/local/include, которые переопределили системные заголовки. - person fool; 22.12.2018
comment
Все эти годы спустя это был ответ для меня, когда дело дошло до установки определенных пакетов NPM / установки разных версий Python с использованием pyenv. - person Michael Bondi; 31.03.2021

Есть другой способ решить эту проблему, какой ИМХО лучше. Я пишу это, чтобы легко найти ответ в следующий раз, когда я столкнусь с этой ошибкой и забуду решение (через пару лет?)

Перейдите в Xcode и удалите файлы проекта, включенные в раздел «Заголовки», из этапов сборки.

Это предотвратит ненадлежащее действие компилятора, в том числе из вашего пространства (которое должно быть доступно только (или, по крайней мере, последним) через «Time.h»)

По сути, это говорит Xcode: «Нет, я не хочу искать свои собственные заголовки, как если бы они были библиотекой, потому что это мой собственный проект».

Это, вероятно, имеет другие вторичные последствия, но, по крайней мере, для моего использования это лучше, чем переименование моего «Time.h».

person iamacomputer    schedule 25.08.2016