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++
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie nur verwenden können, den normalen linker Flagge, gleiche wie Sie tun würde, für den gcc:
clang -lc++
oderclang -lstdc++
je nachdem, welche Umsetzung Sie wollen. (und man sollte wollen libc++)-lstdc++
eher?-lstdc++
ist für libstdc++.-lc++
flag wird ignoriert, wenn das tool im compiler-Modus, aber ich kann damit Leben. Danke!