Zwingen Klammerten sich an link, der mit C++ runtime

Ich habe ein Projekt mit einer Mischung von C-und C++ - Quellcode. Derzeit builds mit GCC unter OS X. hat das Projekt Die maßgeschneiderte build-Skripte, die berufen sich auf die gcc Befehl zum kompilieren der C-und C++ - Quellcode und separat aufrufen der linker.

Ich versuche jetzt zu bekommen es Gebäude mit Clang.

Aufrufen clang funktioniert das kompilieren der Quelldateien korrekt; es wird unterschieden zwischen .c und .cpp Quellcode-Dateien kompiliert, die für die entsprechende Sprache in jedem Fall. Ich habe Probleme bei der link-Zeit, obwohl. Wenn der linker aufgerufen wird clang, die C++ - Laufzeit-Bibliotheken sind nicht verbunden, was zu einem build-Fehler aufgrund von fehlenden Symbole.

Kann ich den link erfolgreich wenn ich clang++ als build-tool, aber das bewirkt dann, dass die compile-Zeit-Fehler und-Warnungen; es mag nicht wirklich kompilieren von C-Quellcode mit dem C++ - compiler.

clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
...
/usr/include/stdio.h:250:49: error: redefinition of parameter 'restrict'

Ich angeben müssen, die ein einzelnes Werkzeug für den build-Skripts zu verwenden, da der compiler/linker, so muss ich nicht eine einfache substitution von clang im Ort gcc.
Gibt es eine Möglichkeit, die ich überreden kann clang (nicht clang++) zur Verbindung mit dem C++ runtime-Bibliotheken?

Optionen wie -stdlib=libc++ funktionieren nicht.

  • Warum müssen Sie ein einzelnes Werkzeug? Die toolchain sollte in der Lage sein, um ein C und ein C++ - compiler
  • Custom build-Skripte, die wäre zu schmerzhaft, zu ändern, zu ermöglichen, eigene Werkzeuge.
  • Gerade die inverse Beziehung. Erstellen Sie ein "compile" - Skript, das die Argumente, prüft, ob die Datei in C oder C++, und fordert die klappern oder clang++ als nötig. Aktualisieren Sie Ihre build scripts beziehen sich auf dieses Skript. Alternativ link immer mit clang++
Schreibe einen Kommentar