2011-03-25 20 views
25

Estoy intentando compilar fuentes C y C++ utilizando GCC.Compilación de archivos C y C++ utilizando GCC

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

Ahora, esto funciona bien, excepto que tengo dos advertencias.

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 

Por lo tanto, no puedo usar -Werror con esta configuración. ¿Pueden estas advertencias ser suprimidas de alguna manera?

+0

Lo que piensas_ que estás haciendo es muy diferente de _lo que estás haciendo_. Primero está estableciendo el estándar de lenguaje en C++ 0x y luego configurándolo en C99, que es equivalente a simplemente usar C99 para _both_ archivos. Sin embargo, la compilación de C++ en el modo C99 es imposible, por lo que para el archivo '.cpp', el compilador volverá a su valor predeterminado, que es C++ 98. Por lo tanto, compila el archivo C en C99 y el archivo C++ en C++ 98. Al analizar las opciones, GCC ve que tiene archivos incompatibles para la opción de versión de idioma, por lo que muestra advertencias para cada opción. – Damon

Respuesta

40

compilar los archivos por separado, enlazar con 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 
+0

Sí, claro, pero necesito compilarlo en una llamada GCC.Estoy usando una API para llamar a GCC y solo puedo agregar banderas. –

+0

@Let_Me_Be: Entonces necesitarás escribir un script/contenedor y llamarlo, o compilar tu c como C++ sin especificar C99 – Erik

+0

Hmm, podría precompilar la parte de C++ (ya que eso no cambiará) :-) –

1

En lugar de usar gcc use g ++ Esto es para archivos .cpp y c.

+1

¿Pero no 'g ++' compilará los archivos 'C' como' C++'? –

+0

Al proporcionar las instrucciones de compilación, si especifica explícitamente como .c, entonces, según mi conocimiento, puede que no tome como .cpp. Pero por favor confírmalo con alguien que sepa correctamente. – Chaithra

+5

C Los archivos fuente compilados con g ++ se compilarán como código C++. –

2

gcc es el compilador de C y g++ es el compilador de C++. Estás mezclando los dos idiomas con diferentes estilos. Compile aparte y luego vincule:

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 
+1

Necesita '' '' y '-c' adicionales en su línea de compilación de g ++. – Erik

1

Esto es muy relevante para Android NDK. Afortunadamente, hay una solución fea. Para hacer que todos los archivos de C compilados como c99, y todos los archivos CPP como c++0x, añadir las siguientes líneas al archivo 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) 

Esto funciona en la última R8b NDK con el brazo-linux-androideabi-4.6 cadena de herramientas, pero no puedo garantizar que funcione en versiones futuras, y no lo probé con versiones anteriores.

14

si alguien se pregunta la mejor manera de hacer esto en Android, es la siguiente:

LOCAL_CFLAGS := -Werror 
LOCAL_CONLYFLAGS := -std=gnu99 
LOCAL_CPPFLAGS := -std=c++0x 
Cuestiones relacionadas