使用GCC一起编译C和C ++文件

时间:2011-03-25 09:34:16

标签: c++ c gcc

我正在尝试使用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。这些警告可以以某种方式被抑制吗?

7 个答案:

答案 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会自动将其编译为头文件。