Компиляция файлов C и C ++ вместе с помощью GCC - PullRequest
29 голосов
/ 25 марта 2011

Я пытаюсь скомпилировать источники C и 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 с этой настройкой.Можно ли как-то подавить эти предупреждения?

Ответы [ 6 ]

47 голосов
/ 25 марта 2011

Скомпилируйте файлы отдельно, ссылка с 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
15 голосов
/ 01 октября 2013

, если кому-то еще интересно, как это сделать в Android, то это:

LOCAL_CFLAGS := -Werror
LOCAL_CONLYFLAGS := -std=gnu99
LOCAL_CPPFLAGS := -std=c++0x
4 голосов
/ 25 марта 2011

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

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 голос
/ 03 октября 2016

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

1 голос
/ 29 августа 2012

Это очень актуально для 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 с arm-linux-androideabi-4.6 toolchain, но я не могу гарантировать, что он будет работать в будущих версиях, и я не тестировал его с более ранними версиями.

1 голос
/ 25 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...