Ответ 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
Я пытаюсь скомпилировать источники 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
с этой настройкой. Могут ли эти предупреждения быть подавлены каким-то образом?
Скомпилируйте файлы отдельно, ссылку с 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
Если кто-то еще задается вопросом, как это сделать в Android, это:
LOCAL_CFLAGS := -Werror
LOCAL_CONLYFLAGS := -std=gnu99
LOCAL_CPPFLAGS := -std=c++0x
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
Вместо использования gcc используйте g++ Это для файлов .cpp и c.
Это очень актуально для 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, но я не могу гарантировать, что он будет работать в будущих версиях, и я не тестировал его с более ранними версиями.
Я столкнулся с этой проблемой. Я не нашел способ скомпилировать c и С++ с одним liner, но используя autotools autoconf, он сгенерирует правильную конфигурацию и Makefile для каждого .c и .cpp или .cc для их компиляции отдельно, а затем свяжет их. https://www.gnu.org/software/automake/manual/html_node/Autotools-Introduction.html