2014-10-03 6 views
8

Sto provando a compilare un progetto sulla riga di comando su Maverick 10.9. Il progetto si compila perfettamente su Linux. Apparentemente, sembra esserci un problema con ctime su MacOSX. Gli errori sonoCome risolvere il tempo mancante relativo nessun membro negli errori dello spazio dei nomi globale su 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; 

Ho cercato sul web e sembra che ci sia un problema se ci sono le intestazioni in un progetto che si chiama 'time.h' (come è il caso in questo progetto). Sembra anche che in generale ci sia un problema con un'implementazione incompleta di ctime (ma in genere le persone si riferiscono all'installazione di util line da riga di comando tramite xcode).

Mi chiedo quale sia il problema generale e infine come compilare effettivamente il codice su mac. Al contrario, il codice nel repository, ho aggiunto al Makefile in linea 53 un'opzione stdlib

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

L'opzione C++ 11 è già impostato in una riga precedente Makefile.

TIA

+0

'L'opzione C++ 11 è già impostata in un precedente del Makefile. ... qual è il comando effettivo? –

+0

Non ha più importanza. Non era un problema di C++ 11, ma di un'intestazione "Time.h" nel progetto che ha provocato un conflitto con /usr/include/time.h. – user1729210

risposta

7

La risposta è più o meno ovvia. Il progetto contiene un'intestazione Time.h (e la classe corrispondente Time). Sfortunatamente, il file system MacOSX non fa distinzione tra maiuscole e minuscole, il che significa che questo è in conflitto con lo time.h esistente in /usr/include.

È possibile includere i sistemi time.h (ovvero #include <ctime>) in anticipo in Time.h o semplicemente rinominare il file in qualcos'altro (ad esempio MyTime.h).

+2

sì, non è ovvio dal punto di vista di qualcun altro ... –

+0

Bene, ho passato un po 'di tempo con questo problema. – user1729210

2

C'è un modo diverso per risolvere questo problema, che IMHO è migliore. Scrivo questo in modo da trovare facilmente la risposta la prossima volta che ho riscontrato questo errore e ho dimenticato la soluzione (in un paio d'anni?)

Passare a Xcode e rimuovere i file di progetto inclusi nella sezione "Intestazioni" dalla finestra di configurazione. fasi.

Questo consentirà di evitare l'azione inadeguato del compilatore compreso dal vostro spazio (che dovrebbe solo (o almeno ordinato l'ultima) sono accessibili tramite "time.h")

Questo dice in sostanza Xcode "No, non lo faccio voglio cercare le mie intestazioni come se fossero una biblioteca, perché è il mio progetto "

Probabilmente ha altre ripercussioni secondarie ma, almeno per i miei usi, è meglio che rinominare il mio" Time.h "

+0

Bingo. Questo ha funzionato per me. –

Problemi correlati