Kompilieren von C- und C++-Dateien zusammen mit GCC
Lesezeit: 3 Minuten
Ich versuche, C- und C++-Quellen zusammen mit GCC zu kompilieren.
gcc -std=c++0x test.cpp -std=c99 test.c -lstdc++
Nun, das funktioniert gut, außer dass ich zwei Warnungen bekomme.
cc1plus: warning: command line option "-std=c99" is valid for C/ObjC but not for C++
cc1: warning: command line option "-std=c++0x" is valid for C++/ObjC++ but not for C
Daher kann ich nicht verwenden -Werror mit dieser einstellung. Kann man diese Warnungen irgendwie unterdrücken?
Was du denken Sie tun, ist sehr unterschiedlich von was tust du. Sie setzen den Sprachstandard zuerst auf C++0x und dann auf C99, was der Verwendung von C99 für entspricht beide Dateien. Das Kompilieren von C++ im C99-Modus ist jedoch unmöglich, daher für die .cpp -Datei, greift der Compiler auf seine Standardeinstellung zurück, die C++98 ist. Sie kompilieren daher die C-Datei in C99 und die C++-Datei in C++98. Beim Analysieren von Optionen erkennt GCC, dass Sie inkompatible Dateien für beide Sprachversionsoptionen haben, und gibt daher Warnungen für jede Option aus.
– Dämon
1. Oktober 2013 um 15:17 Uhr
Die Dateien separat kompilieren, mit g++ verknüpfen
gcc ist der C-Compiler und g++ ist der C++-Compiler. Sie mischen die beiden Sprachen mit unterschiedlichen Stilen. Auseinander kompilieren und dann verlinken:
Du brauchst ein Extra = und ein -c in Ihrer g++ Kompilierungszeile.
– Erich
25. März 2011 um 9:42 Uhr
Dies ist sehr relevant für Android NDK. Glücklicherweise gibt es einen hässlichen Workaround. Um alle C-Dateien als kompiliert zu machen c99und alle CPP-Dateien als c++0xfügen Sie der Android.mk-Datei die folgenden Zeilen hinzu:
Dies funktioniert im neuesten NDK r8b mit der Toolchain arm-linux-androideabi-4.6, aber ich kann nicht garantieren, dass es in zukünftigen Versionen funktioniert, und ich habe es nicht mit früheren Versionen getestet.
Ich bin auch auf dieses Problem gestoßen. Ich habe keinen Weg gefunden, c und c++ mit einem Einzeiler zu kompilieren, aber mit autotools autoconf wird es die richtige Konfiguration und Makefile für jede .c und .cpp oder .cc generieren, um sie einzeln zu kompilieren und sie dann zu verknüpfen. https://www.gnu.org/software/automake/manual/html_node/Autotools-Introduction.html
abunickabhi
Anstatt gcc zu verwenden, verwenden Sie g++.
Das gilt für beide Dateitypen, .cpp- und .c-Dateien.
Versuchen Sie, cpp in c einzuschließen oder umgekehrt, und verwenden Sie dann g ++ zum Kompilieren. Ich denke, GNU wird es automatisch als Header-Datei kompilieren.
13899600cookie-checkKompilieren von C- und C++-Dateien zusammen mit GCCyes
Was du denken Sie tun, ist sehr unterschiedlich von was tust du. Sie setzen den Sprachstandard zuerst auf C++0x und dann auf C99, was der Verwendung von C99 für entspricht beide Dateien. Das Kompilieren von C++ im C99-Modus ist jedoch unmöglich, daher für die
.cpp
-Datei, greift der Compiler auf seine Standardeinstellung zurück, die C++98 ist. Sie kompilieren daher die C-Datei in C99 und die C++-Datei in C++98. Beim Analysieren von Optionen erkennt GCC, dass Sie inkompatible Dateien für beide Sprachversionsoptionen haben, und gibt daher Warnungen für jede Option aus.– Dämon
1. Oktober 2013 um 15:17 Uhr