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?
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
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
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
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.
Au lieu d’utiliser gcc, utilisez g ++ C’est le cas pour les fichiers .cpp et c.
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