Подтвердить что ты не робот

Компиляция файлов C и С++ с использованием GCC

Я пытаюсь скомпилировать источники C и С++, используя GCC.

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

Теперь это работает отлично, за исключением того, что я получаю два предупреждения.

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

Поэтому я не могу использовать -Werror с этой настройкой. Могут ли эти предупреждения быть подавлены каким-то образом?

4b9b3361

Ответ 1

Скомпилируйте файлы отдельно, ссылку с 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

Ответ 2

Если кто-то еще задается вопросом, как это сделать в Android, это:

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

Ответ 3

gcc - это компилятор C, а g++ - компилятор С++. Вы смешиваете два языка с разными стилями. Разделите, а затем соедините:

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

Вместо использования gcc используйте g++ Это для файлов .cpp и c.

Ответ 5

Это очень актуально для Android NDK. К счастью, есть уродливое обходное решение. Чтобы все файлы C, скомпилированные как c99, и все файлы CPP как c++0x, добавили следующие строки в файл 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)

Это работает в последнем NDK r8b с toolchain arm-linux-androideabi-4.6, но я не могу гарантировать, что он будет работать в будущих версиях, и я не тестировал его с более ранними версиями.

Ответ 6

Я столкнулся с этой проблемой. Я не нашел способ скомпилировать c и С++ с одним liner, но используя autotools autoconf, он сгенерирует правильную конфигурацию и Makefile для каждого .c и .cpp или .cc для их компиляции отдельно, а затем свяжет их. https://www.gnu.org/software/automake/manual/html_node/Autotools-Introduction.html