我正在尝试使用GCC一起编译C和C ++源代码。
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
。这些警告可以以某种方式被抑制吗?
答案 0 :(得分:45)
单独编译文件,与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
答案 1 :(得分:15)
如果有人想知道在Android中执行此操作的最佳方法,那就是:
LOCAL_CFLAGS := -Werror
LOCAL_CONLYFLAGS := -std=gnu99
LOCAL_CPPFLAGS := -std=c++0x
答案 2 :(得分:4)
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
答案 3 :(得分:1)
而不是使用gcc使用g ++ 这适用于.cpp和.c文件。
答案 4 :(得分:1)
这与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)
这适用于带有arm-linux-androideabi-4.6工具链的最新NDK r8b,但我无法保证它在未来版本中可以使用,而且我没有用早期版本测试它。
答案 5 :(得分:0)
我也遇到了这个问题。我没有找到一种方法来编译c和c ++与一个衬垫,但使用autotools autoconf它将为每个.c和.cpp或.cc生成正确的配置和Makefile,以单独编译它们然后链接它们。 https://www.gnu.org/software/automake/manual/html_node/Autotools-Introduction.html
答案 6 :(得分:0)
尝试在c中包含cpp,反之亦然,然后使用g++编译,我认为gnu会自动将其编译为头文件。