web-dev-qa-db-fra.com

Compiler des fichiers C et C++ ensemble à l'aide de GCC

J'essaie de compiler des sources C et C++ ensemble à l'aide de GCC.

gcc -std=c++0x test.cpp -std=c99 test.c -lstdc++

Maintenant, cela fonctionne bien, sauf que je reçois deux avertissements.

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

Par conséquent, je ne peux pas utiliser -Werror avec cette configuration. Ces avertissements peuvent-ils être supprimés d'une manière ou d'une autre?

27
Let_Me_Be

Compilez les fichiers séparément, lien avec g ++

gcc -c -std=c99 -o file1.o file1.c
g++ -c -std=c++0x -o file2.o file2.cpp
g++ -o myapp file1.o file2.o
43
Erik

si quelqu'un d'autre se demande quel est le meilleur moyen de le faire sous Android, c'est:

LOCAL_CFLAGS := -Werror
LOCAL_CONLYFLAGS := -std=gnu99
LOCAL_CPPFLAGS := -std=c++0x
15
afrojer

gcc est le compilateur C et g++ est le compilateur C++. Vous mélangez les deux langues avec des styles différents. Compiler séparément puis lier:

gcc -std=c99 -c -o test.c.o test.c
g++ -std=c++0x -c -o test.cpp.o test.cpp
g++ -o executable test.cpp.o test.c.o
4
orlp

Ceci est très pertinent pour Android NDK. Heureusement, il existe une solution de contournement moche. Pour que tous les fichiers C soient compilés en tant que c99 et tous les fichiers CPP en tant que c++0x, ajoutez les lignes suivantes au fichier Android.mk:

LOCAL_CPPFLAGS += -std=c++0x
LOCAL_C99_FILES := $(filter %.c, $(LOCAL_SRC_FILES))
TARGET-process-src-files-tags += $(call add-src-files-target-cflags, $(LOCAL_C99_FILES), -std=c99)

Cela fonctionne dans la dernière rKb NDK avec la chaîne d'outils arm-linux-androideabi-4.6, mais je ne peux pas garantir que cela fonctionnera dans les versions futures, et je ne l'ai pas testé avec les versions précédentes.

1
Alex Cohn

Au lieu d’utiliser gcc, utilisez g ++ C’est le cas pour les fichiers .cpp et c.

1
Chaithra

J'ai rencontré ce problème aussi. Je n'ai pas trouvé le moyen de compiler c et c ++ avec une ligne mais utiliser autotools autoconf générera la configuration appropriée et un Makefile pour chaque fichier .c et .cpp ou .cc afin de les compiler individuellement, puis de les lier. https://www.gnu.org/software/automake/manual/html_node/Autotools-Introduction.html

0
Adam Mendoza