使用GCC一起编译C和C ++文件
我正在尝试使用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
进行此设置。 能以某种方式抑制这些警告吗?
单独编译文件,与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++
是C ++编译器。 您正在混合使用不同风格的两种语言。 分开编译然后链接:
gcc -std=c99 -c -o test.co test.c g++ -std=c++0x -c -o test.cpp.o test.cpp g++ -o executable test.cpp.o test.co
而不是使用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)
这适用于带有arm-linux-androideabi-4.6工具链的最新NDK r8b,但我无法保证它在未来的版本中可以使用,而且我没有用早期版本测试它。
我也遇到了这个问题。 我没有找到使用单行编译c和c ++的方法,但是使用autotools autoconf它将为每个.c和.cpp或.cc生成正确的配置和Makefile以单独编译它们然后链接它们。 https://www.gnu.org/software/automake/manual/html_node/Autotools-Introduction.html