2015-03-30 15 views
7

Mit O X 10.10.2 Datei nicht gefunden, lade ich Clang for Mac OS X v 3.6.0, und versuchen, ein einfaches Hallo Welt Programm zu kompilieren..Klirren ++: fatale Fehler: ‚unistd.h‘

Die Befehle, die ich verwenden, sind diese:

In file included from main.cpp:1: 
In file included from ./clang+llvm-3.6.0-x86_64-apple-darwin/bin/../include/c++/v1/iostream:37: 
./clang+llvm-3.6.0-x86_64-apple-darwin/bin/../include/c++/v1/__config:23:10: fatal error: 'unistd.h' file not 
    found 

was Sinn macht, da es keine Datei ist unistd.h:

cd . 
./clang+llvm-3.6.0-x86_64-apple-darwin/bin/clang++ main.cpp 

Das Ergebnis ist dieses (Sie clang-. heruntergeladen annimmt) , wie nachprüfbar durch

find . -name unistd.h 

ergibt 0 Ergebnisse.

Ich habe versucht, die LibC++ source code v. 3.6.0 herunterladen, aber auch das enthält keine unistd.h. Wo finde ich die offizielle/Vanilla-Version dieser Datei und die referenzierten und damit referenzierten Dateien?

+1

Sie müssen Xcode installieren. – user657267

+0

Was passiert, wenn Sie versuchen, außerhalb Ihres Clang-Ordners nach dem Header zu suchen? Zum Beispiel/Bibliothek oder/System/Bibliothek? –

+0

'find/-name unistd.h' findet Dateien nur in'/Applications/Xcode/* ', und ich habe versucht, ohne Xcode auszukommen. –

Antwort

4

Clang enthält keine AC-Bibliothek oder Systemheader, Sie müssen Xcode installieren, wenn Sie auf OS X programmieren möchten. This page hat weitere Details, wenn Sie nicht das gesamte Xcode-Paket installieren möchten kann nur mit den Befehlszeilen-Tools entkommen.

Sobald Sie Xcode/Kommandozeilen-Tools installiert haben Sie entweder die Versionen von Klirren verwenden können und gcc enthalten mit Xcode oder die, die Sie heruntergeladen haben, obwohl es in der Regel einfacher ist, oder Homebrew zu verwenden, wenn Sie schauen, zu verwenden, bis zu Datumsversionen von beiden.

+1

Ich kann die Option '-I 'in jeder Clang-Version verwenden und auf die Xcode-Include-Dateien verweisen, z. 'clang ++ -I/Programme/Xcode.app/Inhalte/Entwickler/Plattformen/MacOSX.platform/Entwickler/SDKs/MacOSX10.10.sdk/usr/include main.cpp'. Vielen Dank! –

+1

Die Befehlszeilentools für Xcode können durch Ausführen von 'xcode-select --install' installiert werden (und Sie müssen sie jedes Mal neu installieren, wenn Xcode aktualisiert wird) – such

0

unistd.h ist kein C oder C++ Header! Es ist ein POSIX-Header.

Sie könnten XCode installieren, wie es aus, dass kommen werde, aber ich weiß ehrlich nicht, ob das überhaupt kompatibel mit der Clang Laufzeit sein wird. Ich bin keine Mac-Person.

Vielleicht können Sie eine Alternative finden; zum Beispiel, gibt es keine Möglichkeit, dass Sie unistd.h brauchen, um ein "Hallo Welt" Programm zu kompilieren!

+0

Verstehe ich die Dinge richtig, wenn jedes Betriebssystem sein eigenes 'unistd.h' bereitstellen muss? Ist das der Grund, warum ich die Apple-Version brauche? Der ganze Sinn dieses Bestrebens war, die Xcode-Abhängigkeit zu minimieren ... Gibt es kein generisches 'unistd.h' für UNIX-basierte Systeme? –

+0

Die Xcode-Header sind in Ordnung mit clang, in der Tat ist es die einzige Möglichkeit, System/c-Header auf OS X zu erhalten (abgesehen vom Kopieren von Apple's Quellseite), OP wird Xcode brauchen, um fast alles zu tun, es sei denn, er verwendet keine Header überhaupt.Das manuelle Installieren von Clang auf OS X ist normalerweise auch eine Zeitverschwendung, da Macports und/oder Brew vorhanden sind. – user657267

+0

@ user657267: Alles in Ordnung, Sie sollten am besten auf eine Antwort dann loslegen! ATM Sie scheinen nur Ihre Antwort über Kommentare zu verbreiten, die dafür nicht sind .... –

1

Dieser Fehler verschwand nach xcode-select --install läuft.

(Ich behalte nur HomeBrew der LLVM und Klirren regelmäßig aktualisiert, so dass mein ursprünglicher macos Header altes gewesen sein muss/nicht existent, bis ich den obigen Befehl verwendet, das zu beheben.)