Ich versuche, ein Projekt in der Befehlszeile auf Maverick 10.9 zu kompilieren. Das Projekt kompiliert perfekt unter Linux. Scheinbar scheint es ein Problem mit ctime auf MacOSX zu geben. Die Fehler sind
%Vor%Ich habe das Internet durchsucht und es scheint ein Problem zu geben, wenn es in einem Projekt Header gibt, die 'time.h' heißen (wie es in diesem Projekt der Fall ist). Es scheint im Allgemeinen auch ein Problem mit einer tatsächlichen unvollständigen Implementierung von ctime zu geben (aber im Allgemeinen beziehen sich Leute auf Befehlszeilenprogramme über xcode).
Ich frage mich, was das allgemeine Problem ist und schließlich wie man den Code auf Mac tatsächlich kompiliert. Im Gegensatz zum Code im Repository habe ich dem makefile in Zeile 53 eine stdlib-Option hinzugefügt
%Vor%Die C ++ 11-Option ist bereits in einer vorherigen Zeile des Makefiles festgelegt.
TIA
Die Antwort ist mehr oder weniger offensichtlich. Das Projekt enthält einen Header Time.h
(und die entsprechende Klasse Time
). Leider wird beim MacOSX-Dateisystem nicht zwischen Groß- und Kleinschreibung unterschieden, was bedeutet, dass dies mit dem vorhandenen time.h
in /usr/include
kollidiert.
Sie können entweder die Systeme time.h (also #include <ctime>
) vor dem Time.h
einfügen oder einfach Ihre Datei umbenennen (z. B. MyTime.h
).
Es gibt einen anderen Weg, dies zu lösen, was IMHO besser ist. Ich schreibe dies, damit ich beim nächsten Mal, wenn ich diesen Fehler treffe, die Antwort leicht finden kann und die Lösung vergessen habe (in ein paar Jahren?)
Gehen Sie in Xcode und entfernen Sie die Projektdateien, die im Abschnitt "Headers" enthalten sind, aus den Build-Phasen.
Dies verhindert die unangemessene Aktion des Compilers einschließlich Ihres Space (der nur (oder zumindest zuletzt) über "Time.h" erreichbar sein sollte)
Das sagt im Wesentlichen Xcode "Nein, ich möchte meine eigenen Header nicht durchsuchen, als ob sie eine Bibliothek wären, weil es mein eigenes Projekt ist"
Es hat wahrscheinlich andere sekundäre Auswirkungen, aber zumindest für meine Zwecke ist dies besser als das Umbenennen meiner "Time.h"